g ++库搜索失败

时间:2012-03-24 11:11:29

标签: gcc linker g++

我有一个目录结构如下:

/
|
+--- /lib
|      libsomething.a
|      libsomething.so
|
+----/obj
       anObjFile.o

当我从obj目录中运行以下命令时:

g++ -L../lib -lsomething anObjFile.o

我收到undefined reference错误。显然gcc无法找到libsomething.a

但是现在如果我删除libsomething.so然后重新运行命令,链接就会成功。

根据gcc documentation -lsomething应扩展为libsomething.a。那么为什么libsomething.so的存在导致库搜索失败?另外,我该如何解决这个问题?

我在Linux Mint 12上使用gcc版本4.6.1。

1 个答案:

答案 0 :(得分:1)

.so文件是一个动态库,这意味着每次运行程序时都会使用它。在这种情况下,您需要告诉您的操作系统(在这种情况下为Mint)动态库所在的位置,以便您的prgramm可以在运行时找到它。

.a文件是一个静态库,意味着它所需的功能将在链接时复制到您的prgramm中。所以你的prgramm可以在没有库文件的情况下运行。

如果没有其他说法,gcc会假设您要使用动态库。如果它可以找到.so文件,它将使用它而不是.a文件。如果你想告诉gcc使你的程序静态(使用.a文件)你可以在你的gcc调用中添加-static。

然而,在使用动态库时链接失败的原因尚不清楚。你是如何安装/构建库的?