【发布时间】:2012-08-05 22:09:21
【问题描述】:
我正在尝试使用 g++ 将多个 SDL 实用程序类分组到 C++ 的静态库中。我正在使用 ubuntu linux 11.10 和 gcc 版本 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)。 ar的版本是2.21.53.20110810。
由于所有文件都很小,我目前只使用头文件。我提到这一点,以防它与问题有关。此外,大多数头文件都使用 -lSDL 编译为目标代码(我不确定这是否正确甚至相关,但无论哪种方式都失败了)。最后,两个不同的类有几个静态成员,在它们自己的文件中定义,以包含在流程的最后步骤中(尝试遵循 ODR)。
问题是,每个文件都被编译成目标代码就好了,然后使用 ar 创建一个存档,但是当我尝试编译主文件并将它链接到我的新库时(我是 libDanGfx.a创建):
g++ -Wall -ansi -pedantic newmain.cpp -L。 -lSDL -lDanGfx
我收到此错误:
./libDanGfx.a:无法读取符号:存档没有索引;运行ranlib添加一个
即使在删除所有档案和目标代码后也会发生这种情况。
我已经搜索了该站点,但还没有找到问题的答案。使用 ranlib 根本没有帮助,还尝试将 -m32 提供给我的编译器,但仍然无济于事。我在三台不同的机器上试过,都失败了。
弗兰基,我正在考虑删除整个存档文件,更新 makefile 并仅链接目标文件,但我真的很想知道这里发生了什么,并在此过程中学到一些东西。
我预计会丢失很多信息,所以为了以防万一,我上传了一个包含整个内容的 .tar.gz 文件(只需解压缩并尝试 makefile)。为了您的阅读,所有的 .o 文件都将位于 objects 目录中,并且使用的每个命令都可以在 makefile 中读取。另外,main 应该在屏幕上显示一些无脑的东西(可能是红色方块,因为资源文件没有上传以节省空间,当然 .o 和 .a 文件也被排除在外)。
文件可以到达in this link。
【问题讨论】:
-
您是否尝试执行错误消息中说您应该执行的操作? IE。运行命令
ranlib? -
约阿希姆:感谢您的回复。正如我提到的“使用 ranlib 根本没有帮助”。尝试了我在其他问题中看到的其他一些东西(主要是在目标文件上运行“文件”以查看它们是否吐出预编译的头文件)但一无所获。
标签: c++ g++ sdl static-libraries unix-ar