我正在尝试使用 libtommath 库。我在 Ubuntu Linux 上的项目中使用 NetBeans IDE。我已经下载并构建了该库,我已经完成了“make install”以将生成的 .a 文件放入 /usr/lib/ 并将 .h 文件放入 /usr/include
它似乎正确地找到了文件(因为我不再收到这些错误,这是我在安装到 /usr 目录之前所做的)。
但是,当我创建一个简单的 main 来调用 mp_init (位于库中)时,当我尝试创建我的项目时,出现以下错误:
mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
gcc -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.c
mkdir -p dist/Debug/GNU-Linux-x86
gcc -o dist/Debug/GNU-Linux-x86/cproj1 build/Debug/GNU-Linux-x86/main.o
build/Debug/GNU-Linux-x86/main.o: In function 'main':
/home/[[myusername]]/NetBeansProjects/CProj1/main.c:18: undefined reference to `mp_init'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/cproj1] Error 1
所以,看起来链接器无法在库中找到该函数,但它确实在那里,所以我只是不知道是什么原因导致的。
如果我直接输入 gcc 命令并跳过 makefile,我也会得到同样的错误,我还确保静态库也用 gcc 编译。
编辑添加:
如果我直接编译并使用 -l 或 -L 添加库,我会得到这些相同的错误:
$ gcc -l /usr/lib/libtommath.a main.c
/usr/bin/ld: cannot find -l/usr/lib/libtommath.a
collect2: ld returned 1 exit status
$ gcc -llibtommath.a main.c
/usr/bin/ld: cannot find -llibtommath.a
collect2: ld returned 1 exit status
$ gcc -Llibtommath.a main.c
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status
$ gcc -Llibtommath.a main.c
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status
我对这些东西非常生疏,所以我不确定我在这里使用了正确的命令,在 -L 示例中是否找到了库?如果找不到图书馆,我到底如何让它找到图书馆?它在/usr/lib中,我已经用当前目录中的.a文件等进行了尝试。是否需要设置环境变量?如果是的话,如何进行等等。
我尝试过一个完全不同的库(GMP)并且遇到了完全相同的问题。这一定是某种 Ubuntu 环境问题吗?有人知道如何解决这个问题吗?