Mingw gcc,“-“共享-静态”;一起通过
在windows下研究MinGW的闪烁时,我注意到它将Mingw gcc,“-“共享-静态”;一起通过,gcc,static,mingw,ld,shared,Gcc,Static,Mingw,Ld,Shared,在windows下研究MinGW的闪烁时,我注意到它将-shared和-static作为LDFLAGS一起传递给gcc LDFLAGS=-shared-static-mwindows$(LDMINGW) 我在谷歌上搜索,只从clang那里找到了一些信息: [MinGW,CrossWindows]允许传递-静态和-共享 在这些组合中,像往常一样链接DLL,但传递-Bstatic而不是-Bdynamic以表示更喜欢静态库。 我的问题是:GCC也会这样做吗? 我还没有找到任何证据。您可以在GCC链
-shared
和-static
作为LDFLAGS
一起传递给gcc
LDFLAGS=-shared-static-mwindows$(LDMINGW)
我在谷歌上搜索,只从clang那里找到了一些信息: [MinGW,CrossWindows]允许传递-静态和-共享
在这些组合中,像往常一样链接DLL,但传递-Bstatic而不是-Bdynamic以表示更喜欢静态库。
我的问题是:GCC也会这样做吗?
我还没有找到任何证据。您可以在GCC链接中传递
-static
和-shared
。他们的
组合效果与您在llvm链接中发现的效果相同,
GCC的情况一直如此
-shared
指示GCC链接生成共享库而不是程序,
它通过将选项-shared
传递到调用
链接器
-static
指示GCC链接在解析时忽略共享库
输入库选项-lname
。默认情况下,-lname
将由
在指定或默认链接器搜索目录中搜索
共享库libname.so
(在Windows上,[lib]name.dll
)
或者静态库libname.a
(在Windows上也是[lib]name.lib
)和
如果在同一目录中找到这两个库,则返回共享库<代码>-静态
只是从搜索中排除所有共享库。GCC通过传递选项-Bstatic
直到在生成的链接器中的某个位置调用链接器
所有-lname
选项前面的命令行
答案是明确的
此选项与-shared
一致,其效果是生成一个共享库
其所有依赖库都已静态解析
-Bstatic
-dn
-非共享
-静止的
不要链接到共享库。这仅在支持共享库的平台上才有意义。
此选项的不同变体用于与各种系统兼容。您可以在命令行上多次使用此选项:
它会影响库对其后面的-l选项的搜索。此选项还意味着--unresolved symbols=report all。
此选项可与-shared一起使用。这样做意味着正在创建一个共享库,但必须通过从静态库中提取条目来解析库的所有外部引用。
(我的重点)
虽然共享库的静态链接原则上只是一个受限链接
与程序的静态链接一样,在实践中它经常遇到
Unix和Linux上的一个障碍,因为所有的目标代码都链接到一个ELF共享库中
libname.so
必须,
由GCC编译选项-fPIC
生成,而目标文件
静态库中的存档通常不使用-fPIC
编译。链接使用
-共享-静态
因此容易失败,因为必要的静态库包含
非PIC对象文件
但是,您不必担心Windows上的GCC,因为
没有像图五那样的区别。Windows中的非PIC
目标代码