如何使用GCC制作基于其他静态库的静态库

How to make a static lib based on other static libs using GCC?

本文关键字:静态 其他 于其他 GCC 何使用      更新时间:2023-10-16

我想使用一些现有的静态库:libX.a, libY.a, libZ.a和一些目标文件制作一个名为libXYZ.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,以在ld命令之前获得one.otwo.o,如下所示:

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错误。你知道是什么导致了这些错误吗?

所以我的问题是:ld命令是从其他静态库和。o文件构建静态库的正确命令吗?