ubuntu – 试图包括一个库,但不断得到“未定义的引用”消息

前端之家收集整理的这篇文章主要介绍了ubuntu – 试图包括一个库,但不断得到“未定义的引用”消息前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用libtommath库。我使用NetBeans IDE为我的项目在Ubuntu linux。我已经下载并构建了库,我做了一个“make install”将生成的.a文件放入/ usr / lib /中,将.h文件放入/ usr / include

它似乎是适当地找到文件(因为我不再得到这些错误,我在安装到/ usr目录之前)。

但是,当我创建一个简单的主要调用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)和EXACT同样的问题。这必须是某种类型的Ubuntu环境问题?任何人都有任何想法如何解决这个问题?

这里的诀窍是把库在你编译的模块之后。问题是一个参考的东西。链接器按顺序解析引用,因此当库在编译模块之前时,链接器会感到困惑,并且不认为库中的任何函数都需要。通过将库放在模块之后,模块中对库的引用由链接器解析。

猜你在找的Ubuntu相关文章