gpt4 book ai didi

linux - g++ 将 .a 文件及其依赖项链接到静态 .so

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:15 25 4
gpt4 key购买 nike

我有一个 libSomelib.a,可以通过以下命令链接到可执行文件:

g++ -L. -lsomeLib -lpcrecpp -lpcre -lpthread main.cpp -o main

但是我如何从中链接一个包含所有依赖项的共享对象?

我想用我的新 someLib.so 实现以下目标:

g++ -L. -lsomeLib main.cpp -o main

我尝试过以下方法:

g++ -shared -L. -lsomeLib -lpcrecpp -lpcre -lpthread -o libSomelib_static.so

这给了我一个没有符号的 .so 文件。

PS:我完全是编译器的初学者。

最佳答案

这里存在一些问题:

  1. 链接器仅使用存档中的目标文件来解析未解析的符号。这就是为什么命令行中的存档顺序很重要。正确的顺序是目标文件,然后是静态库,然后是共享库。例如。 g++ -o main -pthread main.cpp -L. -lsomeLib -lpcrecpp -lpcre .
  2. 当您构建共享库时,存档不会解析任何符号,因此链接器完全忽略它。参见1。
  3. 共享库的目标文件必须编译为位置独立代码(-fPIC编译器标志)。归档文件通常是在没有此标志的情况下构建的。
  4. 使用-pthread在编译和链接多线程应用程序时标记两者,而不是 -lpthread .

关于linux - g++ 将 .a 文件及其依赖项链接到静态 .so,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com