当前位置: 首页 > 面试题库 >

如何强制链接器使用共享库而不是静态库?

张英范
2023-03-14
问题内容

这是Linux编程书的引文:

% gcc -o app app.o -L. –ltest

假设这两个libtest.alibtest.so是available.Then链接器必须选择的图书馆之一,而不是other.The链接搜索每个目录(第那些指定的-L选项,然后将这些在标准目录)。当链接器找到了一个包含目录无论是libtest.alibtest.so,链接器将停止搜索目录。如果目录中仅存在两个变体之一,则链接器将选择该变体。否则,除非另有明确指示,否则链接程序将选择共享库版本。您可以使用该-static选项来请求静态归档。例如,libtest.a即使libtest.so共享库也可用,以下行仍将使用存档

% gcc -static -o app app.o -L. –ltest

由于链接器遇到包含libtest.a它的目录时,它将停止搜索并使用该静态库,那么如何强制链接器仅搜索共享库,而不搜索静态库?

% gcc -o app app.o -L. libtest.so


问题答案:

如果链接器支持,则可以使用-l其形式的option -l:filenameld不支持旧版本)

gcc -o app app.o -L. -l:libtest.so

另一种选择是直接使用文件名而不使用-l-L

gcc -o app app.o /path/to/library/libtest.so


 类似资料:
  • 问题内容: 如何在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

  • 问题内容: 我可以使用带有静态链接的gcc构建可执行文件: gcc-静态xxx.c -o xxx 所以我可以在没有任何外部依赖库的情况下运行xxx。 但是,如果我要构建没有外部依赖库的共享库怎么办?我的意思是我希望共享库静态链接其外部引用。 问题答案: 这将起作用: 需要说明的是:-static标志(如果提供给gcc)会传递给链接器(ld),并告诉它与库的静态版本(.a)(由-l标志指定)一起使用

  • 我正在尝试链接一个名为libtest lib的预编译共享库文件。所以这是我在CMakeLists的底部所拥有的。txt: 如上所述,我得到以下错误: 如果我注释掉add_library行,我会得到以下结果: 在库中链接时,似乎绝对需要源文件(.c、cpp等)。但我如何在一个。那档案呢?这些文档对target_link_库()做了如下介绍: 被命名的必须是由add_executable()或add_

  • 主要内容:静态链接库,动态链接库,总结我们知道,C、C++程序从源文件到生成可执行文件需经历 4 个阶段,分别为预处理、编译、汇编和链接,本节将重点围绕链接阶段,对静态链接库和动态链接库做详细的讲解。 有关链接操作的具体细节,感兴趣的读者可阅读《 到底什么是链接,它起到了什么作用?》和《 符号——链接的粘合剂》这两节。总的来说链接阶段要完成的工作,就是将同一项目中各源文件生成的目标文件以及程序中用到的库文件整合为一个可执行文件。 通过

  • 问题内容: 我使用的C ++库可以构建为共享库或静态库。该库使用一种工厂技术,该技术在程序启动时创建静态对象并注册静态对象。 只要使用共享库,此方法就可以正常工作。使用静态版本时,所有静态对象都不会包含在最终程序中(因为它们没有被直接引用),因此它们的功能不可用。 有没有一种方法可以在链接时强制gcc包含库中的所有静态对象? 该库是开源的,如果有帮助,我可以对其进行修改。 问题答案: 您可以使用,

  • 我试图将我编译的简单共享库(libhello.so)链接到我的本机C++代码中。库libhello.so文件是: 1。Get13.h 2.get13.cpp Android文件是: 1。myapplication/jni/android.mk 问题是,在gradle构建过程中,我在文件native-lib.cpp中得到了这个错误: 我使用android NDK包中包含的make_standalon