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

可以使用静态链接使用的库来构建共享库吗?

富建章
2023-03-14
问题内容

我可以使用带有静态链接的gcc构建可执行文件:

gcc-静态xxx.c -o xxx

所以我可以在没有任何外部依赖库的情况下运行xxx。

但是,如果我要构建没有外部依赖库的共享库怎么办?我的意思是我希望共享库静态链接其外部引用。


问题答案:

这将起作用:

# Generate position independent code (PIC)
gcc -fPIC -c -o xxx.o xxx.c

# Build a shared object and link with static libraries
ld -shared -static -o xxx.so xxx.o

# Same thing but with static libc
ld -shared -static -o xxx.so xxx.o -lc

需要说明的是:-static标志(如果提供给gcc)会传递给链接器(ld),并告诉它与库的静态版本(.a)(由-l标志指定)一起使用,而不是与动态版本(.so)。

另一件事:在我的系统(Debian)上,最后一个示例给出了 libc.a … … -fPIC 错误 重新编译
。可以肯定的是,这意味着我系统上的libc.a没有使用-fPIC进行编译。一个 容易缓存搜索libc中石化 确实然而给予了一定的成效。

另请参阅:程序库HOWTO,SO:组合.so
libs
,ld(1),gcc(1)



 类似资料:
  • 问题内容: 这是Linux编程书的引文: 假设这两个和是available.Then链接器必须选择的图书馆之一,而不是other.The链接搜索每个目录(第那些指定的选项,然后将这些在标准目录)。当链接器找到了一个包含目录无论是或,链接器将停止搜索目录。如果目录中仅存在两个变体之一,则链接器将选择该变体。否则,除非另有明确指示,否则链接程序将选择共享库版本。您可以使用该选项来请求静态归档。例如,即

  • 主要内容:静态链接库,动态链接库,总结我们知道,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

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

  • 问题内容: 我正在尝试使用集成使用我的应用程序编写的第三方库。我已经为测试编写了所有的python代码。我很难找到设置此示例的方法。 我有一个手动创建的文件。第三方给了我a和a 。据我所知,没有其他依赖项。有人可以提供使用和进行设置的示例吗? 谢谢 问题答案: 当然可以! (在下文中,我假设你已经知道如何处理之间和交互和,如果这不是完全的情况下,只问我会开发部分以及) 示例(来自我的C ++项目,

  • 在共享的情况下,我使用的是cmake文件 在静态情况下 我认为我只需要更改如何从 失败:cmd.exe/c“cd.&&clang++.exe-target=aarch64-none-linux-android-gcc-toolchain=c://android/android-sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/