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退出redis的示例:指定配置文件方式启动源码redis:roo...
ubuntu中mysql改密码忘了的解决方法:1.在终端中切换到root权...
ubuntu安装mysql失败的解决方法原因:可能是原有的MySQL还有...
使用centos和ubuntu建站的区别有以下几点1.CentOS是Linux发行...
ubuntu图形界面和字符界面切换的方法:可以通过快捷键CTRL+A...
ubuntu中重启mysql失败的解决方法1.首先,在ubuntu命令行中,...