c++ - 如何使用 GCC 创建基于其他静态库的静态库?

标签 c++ gcc linker static-libraries ld

<分区>

我想使用一些现有的静态库创建一个名为 libXYZ.a 的静态库:libX.alibY.alibZ.a 和一些目标文件。我用来构建静态库libXYZ.a的命令行是:

ld -o libXYZ.a one.o two.o -L./ -L/cygdrive/c/cygwin/lib/gcc/i686-pc-cygwin/4.8.2 -lX -lY -lZ -lstdc++

我正在使用 Cygwin GCC (g++) 编译 one.cpptwo.cpp 以获得 one.otwo.old 命令之前,如下所示:

g++ -o one.o one.cpp -c
g++ -o one.o two.cpp -c

libX.a, libY.a, libZ.a 都位于当前目录(这就是为什么 -L ./)。我在 ld 行中添加了 C++ 标准库链接器标志 -lstdc++。但是我在做的时候出现了以下错误:

one.o: one.cpp:(.text+0x32): undefined reference to `_Unwind_Resume'
ld: one.o: bad reloc address 0xd in section `.text$_ZN10ConfigC1Ev[__ZN10ConfigC1Ev]'
Makefile:22: recipe for target 'libXYZ.a' failed

所以我的问题是:ld 命令是从其他静态库和 .o 文件构建静态库的正确命令吗?是什么导致了错误?我在论坛上搜索了一下,发现可能是一些不兼容的编译器造成的。但我使用相同的 GCC 编译器构建了所有源代码。

更新:

我再次尝试使用以下命令:

ld -o libXYZ.a one.o two.o -L./ -lX -lY -lZ

但我仍然收到以下错误:

one.o:one.cpp:(.text+0x32): undefined reference to `_Unwind_Resume'
one.o:one.cpp:(.text+0x12a): undefined reference to `_Unwind_Resume'
...
./libX.a(wrapper.o):wrapper.cpp:(.text+0x7ba): undefined reference to `__chkstk_ms'
./libX.a(wrapper.o):wrapper.cpp:(.text+0x7ba): undefined reference to `_Unwind_Resume'
...

而且我省略了许多类似的错误,如上面的 _Unwind_Resume 错误。关于导致这些错误的原因有什么想法吗?

最佳答案

So my question is: Is the ld command the right command to build the static lib from other static libs and .o files?

没有。参见 this answer了解如何做到这一点。

关于c++ - 如何使用 GCC 创建基于其他静态库的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24042369/

相关文章:

c++ - 为什么以这种方式双重声明?

c++ - 为什么我无法访问类 'boost::asio::detail::noncopyable' 中声明的私有(private)成员?

c - gcc -fPIC 似乎与优化标志混为一谈

c++ - OpenCV 未定义引用(带 vector 的 FileStorage<KeyPoint>)

c++ - 无法解析的外部符号 : @12 vs @8 at the end of symbol name

c++ - SDL 运行时二进制文件,它们有什么用?

C++ 圆形对象/getArea()

c++ - 具有不同参数的模板

c++ - 我们可以在 main 的参数中添加 CV 限定符吗?

c++ - 定义模板 numeric_limits 的 limit.h 文件在哪里