导航:首页 > 源码编译 > 静态编译为什么是dll

静态编译为什么是dll

发布时间:2022-08-01 16:52:38

A. 易语言怎么静态编译出dll文件

远程我给你操作,
具体方式
点开易语言
然后
新建windows动态链接库
然后写代码
编译后就是DLL.文件
谢谢参考!

B. SOUI的utilities模块为什么要用DLL编译

SOUI相对于DuiEngine一个重要的变化就是很多模块变成了一个单独的DLL。
然后很多情况下用户可能希望整个产品就是一个EXE,原来DuiEngine提供了LIB编译模式,此时链接LIB模式的DuiEngine就行了。
但是SOUI默认至少Utilities那个模块是不提供LIB编译模式的。
utilities之所以默认只提供DLL编译是因为SString类是由utilities实现的。
字符串是编译中碰到的最最见的基本对象之一。在运行库(CRT)动态编译(MD,MDd)时这不是问题,因为所有模块的内存分配都是在一个相同的运行库(CRT)上,这时在不同模块之间传递对象相对简单。如果项目采用运行库静态编译(MT or MTd),在不同模块之间传递字符串对象是非常困难的,因为一不小心就会发生在A模块中分配的字符串对象被B模块释放。
utilities采用DLL编译就是为了解决这个字符串对象的跨模块传递。
采用运行库动态编译的情况就不说了,这里主要介绍采用静态库编译的CRT的情况。
SOUI中使用的字符串对象采用了一点技巧:每一个String对象中只有一个指针成员变量:
template <class tchar, class tchar_traits>
class TStringT
{
public:
typedef tchar _tchar;
typedef const _tchar * pctstr;

protected:
tchar* m_pszData; // pointer to ref counted string data
};
虽然TStringT是一个模板类,在SOUI中采用类导出的方式将该模板的两个特化类导出:

#ifdef UTILITIES_EXPORTS
# define EXPIMP_TEMPLATE
#else
# define EXPIMP_TEMPLATE extern
#endif

#pragma warning (disable : 4231)

EXPIMP_TEMPLATE template class UTILITIES_API TStringT<char, char_traits>;
EXPIMP_TEMPLATE template class UTILITIES_API TStringT<wchar_t, wchar_traits>;
复制代码
通过将string类导出,保证string的所有运行代码都是在utilities这个模块内部,这也就保证了string对象的唯一成员变量:

tchar* m_pszData;

的内存分配及释放固定在utilities这个模块里。

通过这样处理,无论用户定义string是在哪一个模块,真正的内存管理还是在utilities里,从而使得string对象可以方便的在不同模块之间传递。

比较一下std::string就可以发现,如果使用std::string在不同模块之间传递对象将是非常危险的,因为std::string是模板类,它的代码将会被编译到不同的模块中,也就是说在不同的模块中调用std::string的成员函数执行的代码是不一样的,这样在A模块中声明的string传递到B模块再被B模块释放程序就崩溃了。

C. vs2010为什么设置了静态编译还是需要dll文件才能运行exe

静态编译:就是在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖动态链接库。

编译方式:

第1种:

设置:

1、项目->配置属性->常规->MFC的使用:在静态库中使用MFC

2、项目 -> 配置属性->C/C++->代码生成->运行库 :选择 多线程调试(/MTd)。

编译时,选择的是debug,win32

然后执行编译生成方案,在该工程目录下的debug文件中,找到该.exe文件,即可在其他电脑运行。

第2种:

一般可以配置一下两项:

1.项目 -> 配置属性->常规->MFC的使用 :在静态库中使用MFC。

2.项目 -> 配置属性->C/C++->代码生成->运行库 :选择 多线程调试(/MT)。

编译时,选择的是release,win32(这个选择项在工具栏的debug选框中,一般我们使用debug方式)

D. 易语言 静态编译出来的.exe 为什么还要和皮肤dll放一块才能运行.

任何编译器都不可能把调用的Dll编译到程序里,否则将会加大程序体积且Dll也会失去它的发明目的。有的Dll文件不需要打包,比如windos目录下的User32.dll确保每个系统都有的就不用打包,你使用的Dll文件应自行打包到运行目录下

E. 易语言静态编译为什么是exe

DLL是动态链接库、EXE是可执行文件;另外,E还可以编译模块.ec之类的,这就要看你需要了。目前E静态后都是EXE,不能DLL或者其他格式,除非E官方放出静态可以其他格式,再说DLL编译后就是单独的DLL了 其他编程软件也能调用

F. windows中LIB和DLL的区别与使用

关于lib和dll的区别如下:
(1)lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
(2)如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。
(3)动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载。

G. 易语言静态编译出dll文件后该怎么打开

DLL是动态链接库。。是不能打开的。注入器倒是没有。以前的现在应该也不能用了
一般要用到
——————————我倒是有几个以前的注入器源码。..
输入法.安装 ()
输入法.设置注入

H. 为什么我下载的易语言源码编译出来后是DLL文件

载的易语言源码,源码都是.e的后缀
但是你的这个源码,人家做的时候就是弄的.DLL动态链接库,所以编译后就是DLL。
这个应该是G吧??需要注入的

I. 为什么易语言静态编译后还是提示找不到dll

系统提示丢失dll文件解决办法:
1、下载缺少的dll文件,复制到c:\windows\system32文件夹下;
2、按win+r,输入regsvr32 /s 该文件文件名XX.DLL,点击确定;
3、弹出提示信息框,提示注册成功,点击确定即可。
4、用腾讯电脑管家电脑诊所--搜 缺失dll文件--立即修理

阅读全文

与静态编译为什么是dll相关的资料

热点内容
u盘加密了手机读取不了 浏览:947
oracle11g启动命令 浏览:931
怎么把视频传到自己的文件夹 浏览:700
福州电动车在哪个app上摇号 浏览:818
礼书PDF 浏览:667
什么app看本子 浏览:394
如何学好编译语言 浏览:591
平面编程和切削 浏览:704
phpemoji表情符号 浏览:778
IBM云平台shor算法 浏览:577
程序员当乙方 浏览:519
php商城设计与实现的 浏览:305
php自动打印 浏览:469
哪个app多年轻人 浏览:902
租的服务器如何重装 浏览:937
干眼症程序员 浏览:239
乐动达人安卓版有什么游戏 浏览:484
c523压缩比 浏览:544
命令语气的人什么心态 浏览:435
程序员喜欢留指甲吗 浏览:516