一点背景。假设我有源文件,它们需要最终存放在静态库中。假设有两个 cpp 文件a.cpp
and a.cpp
位于两个不同的子目录中。像这样的事情:
foo/a.h
foo/a.cpp
bar/a.h
bar/a.cpp
他们的内容并不冲突,而且完全不同。文件名是一样的。
现在,编译时我最终得到两个a.o
当然是文件。
gcc -c foo/a.cpp -o foo/a.o
gcc -c bar/a.cpp -o bar/a.o
如果我现在创建一个静态库
ar rcs libfoobar.a foo/a.o bar/a.o
我可以看到静态库中的两个文件都在运行nm libfoobar.a
。看起来不错。
Problem
我看到的问题是如果我运行ar
单独命令foo/a.o
and bar/a.o
将它们放在同一个静态库中。现在后一个目标文件将覆盖前一个,所以运行时nm libfoobar.a
我只是在库中看到了后一个对象。我猜这是由于相同的目标文件名造成的情况。
创建静态库时ar
,我应该总是一次性组合所有对象还是运行也可以ar
多次收集一部分对象,最终都在同一个静态库中?对于这个例子,我可以看到前者的作品,但看不到后者。
当一个人a.cpp
更改并且静态库需要更改?将要ar
找到正确的a.cpp
去图书馆换?
这只是一个小例子,但请考虑一个包含许多文件且有些文件具有相同名称的大型项目。如果您现在想创建一个库,您也可能会遇到这种情况。
一般来说,这只是对库的组成方式、文件的命名方式的组织不善,还是还有其他东西可以让事情正常工作?