linker - 在 unix 上创建库时,除了 "ar rcs"之外还有什么必要吗?

标签 linker unix-ar

我有许多源文件想合并成一个 .a文件。我用命令创建库

ar rcs libcathat.a thing1.o thing2.o fish.o

然后我尝试使用我用来制作 .o 的相同编译器链接到这个库。文件(g++):
 g++ -L/path/to/cathat -lcathat seuss.o -o seuss

但是当我尝试使用在thing1.cpp(理论上在thing.o中表示)中定义的函数时会产生错误:
/path/seuss.cpp:46: undefined reference to `redFishBlueFish(int, char**)'

我还需要对 .a 做些什么吗?文件以使其可以链接到它?

最佳答案

尝试将链接器语句移到最后:

g++ seuss.o -o seuss -L/path/to/cathat -lcathat

如果这不起作用,请确保这些符号实际上在存档中:
nm libcathat.a

关于linker - 在 unix 上创建库时,除了 "ar rcs"之外还有什么必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11093600/

相关文章:

c++ - Visual Studio : Static Link to Static Library

linux - 使用 ar 创建的静态库具有分辨率为 1 s 的时间戳

c++ - g++ 创建静态库 : could not read the symbols archive has no index

C++ 链接器错误

android - arm-eabi-gcc 如何确保 crtbegin_dynamic.o 中的 ".text"部分在最终动态链接的可执行文件中排在第一位?

c - 我应该如何在c文件中包含用extern定义的变量

linker - 用于制作库的 ranlib、ar 和 ld 之间有什么区别

linux - 如何检测一次性链接器的库顺序?

objective-c - Apple Mach-O 框架错误

gcc - 如何设置共享库的动态链接器路径?