我正在尝试使用 libtommath 库。我在 Ubuntu linux 上使用 NetBeans IDE 进行我的项目。我已经下载并构建了库,我已经做了一个“ make install”来放置结果。将文件放入/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,我已经试过了。工作目录里的文件等等。有什么环境变量吗?如果是的话,怎么做等等。
我已经尝试了一个完全不同的库(GMP) ,并有完全相同的问题。这肯定是某种 Ubuntu 环境问题?有人知道怎么解决吗?