我使用的C ++库可以构建为共享库或静态库。该库使用一种工厂技术,该技术在程序启动时创建静态对象并注册静态对象。
只要使用共享库,此方法就可以正常工作。使用静态版本时,所有静态对象都不会包含在最终程序中(因为它们没有被直接引用),因此它们的功能不可用。
有没有一种方法可以在链接时强制gcc包含库中的所有静态对象?
该库是开源的,如果有帮助,我可以对其进行修改。
您可以使用-Wl,--whole-archive -lyourlib
,ld
有关更多信息,请参见联机帮助页。
-Wl之后的所有静态库都将完全包含在内,命令行中的-whole-archive完全包含在内,如果需要,您也可以再次将其关闭,例如-Wl,--whole-archive -lyourlib -Wl,--no-whole-archive -lotherlib
主要内容:静态链接库,动态链接库,总结我们知道,C、C++程序从源文件到生成可执行文件需经历 4 个阶段,分别为预处理、编译、汇编和链接,本节将重点围绕链接阶段,对静态链接库和动态链接库做详细的讲解。 有关链接操作的具体细节,感兴趣的读者可阅读《 到底什么是链接,它起到了什么作用?》和《 符号——链接的粘合剂》这两节。总的来说链接阶段要完成的工作,就是将同一项目中各源文件生成的目标文件以及程序中用到的库文件整合为一个可执行文件。 通过
问题内容: 如何在gcc中静态链接共享库函数? 问题答案: 参考: http://www.linuxquestions.org/questions/linux-newbie-8/forcing-static- linking-of-shared- libraries-696714/ http://linux.derkeiler.com/Newsgroups/comp.os.linux.develo
问题内容: 这是Linux编程书的引文: 假设这两个和是available.Then链接器必须选择的图书馆之一,而不是other.The链接搜索每个目录(第那些指定的选项,然后将这些在标准目录)。当链接器找到了一个包含目录无论是或,链接器将停止搜索目录。如果目录中仅存在两个变体之一,则链接器将选择该变体。否则,除非另有明确指示,否则链接程序将选择共享库版本。您可以使用该选项来请求静态归档。例如,即
问题内容: 我在Linux,GCC中使用Boost库。安装和构建Boost之后,我发现使用Regex和Thread的程序使用共享的Boost库。就我的目的而言,我需要静态链接。如何更改链接类型?我应该重新构建Boost,还是可以通过在自己的项目或Boost配置文件中定义一些常量来设置链接类型? 问题答案: 只需添加到您的构建调用即可。这是一个简单的示例会话: 请注意,静态二进制文件的大小为1.5m
问题内容: 因此,该小组中有很多建议您可以随时进行的工作(尽管不在cgo文档中): 但是,它似乎不起作用: 使用动态库,并检查生成的文件,这似乎可以很好地工作,它实际上在其中带有符号“ x”: 但显然只是bridge.cgo2.o中的标记: 我究竟做错了什么? 对于ref,c标头: 和代码: -- 编辑: 不,-L和-l也不起作用;实际上,在Google网上论坛上有一些具体讨论,认为该(-l /
我有一个测试文件(仅用于链接测试),在该文件中,我用自己的/库重载/