链接时找不到相应的函数,在网上搜的一个解决方法

 程式库的链接

 


试着编译下面这个程式
/* temp.c */
#include
int main(int argc,char **argv)
{
double value;
printf("Value:%f/n",value);
}
这个程式相当简单,但是当我们用 gcc -o temp temp.c 编译时会出现下面所示的错误。
/tmp/cc33Kydu.o: In function `main’:
/tmp/cc33Kydu.o(.text 0xe): undefined reference to `log’
collect2: ld returned 1 exit status
出现这个错误是因为编译器很难找到log的具体实现。虽然我们包括了正确的头文档,但是我们在编译的时候还是要连接确定的库。在Linux下,为了使用数学函数,我们必须和数学库连接,为此我们要加入 -lm 选项。 gcc -o temp temp.c -lm这样才能够正确的编译。也许有人要问,前面我们用printf函数的时候怎么没有连接库呢?是这样的,对于一些常用的函数的实现,gcc编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了。有时候我们在编译程式的时候还要指定库的路径,这个时候我们要用到编译器的 -L选项指定路径。比如说我们有一个库在 /home/hoyt/mylib下,这样我们编译的时候还要加上 -L/home/hoyt/mylib。对于一些标准库来说,我们没有必要指出路径。只要他们在起缺省库的路径下就能够了。系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们能够不指定路径。

更有一个问题,有时候我们使用了某个函数,但是我们不知道库的名字,这个时候怎么办呢?很抱歉,对于这个问题我也不知道答案,我只有一个傻办法。首先,我到标准库路径下面去找看看有没有和我用的函数相关的库,我就这样找到了线程(thread)函数的库文档(libpthread.a)。 当然,假如很难找到,只有一个笨方法。比如我要找sin这个函数所在的库。 就只好用 nm -o /lib/*.so|grep sin>~/sin 命令,然后看~/sin文档,到那里面去找了。在sin文档当中,我会找到这样的一行libm-2.1.2.so:00009fa0 W sin 这样我就知道了sin在 libm-2.1.2.so库里面,我用 -lm选项就能够了(去掉前面的lib和后面的版本标志,就剩下m了所以是 -lm)。 假如您知道怎么找,请赶快告诉我,我回很感激的。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果在使用 imread 函数出现 "不到引用" 错误,可能是因为没有正确安装 OpenCV 库或没有包含它的头文件。 解决方法如下: 1. 确保已经安装了 OpenCV,如果没有安装,请按照官方文档的说明安装。 2. 在代码中包含 OpenCV 头文件,例如: ``` #include <opencv2/opencv.hpp> ``` 3. 在链接链接 OpenCV,例如: ``` g++ -o myprogram myprogram.cpp `pkg-config --cflags --libs opencv` ``` 如果仍然无法解决问题,请检查 OpenCV 的版本,确保与使用的编译器兼容,并重新安装。 ### 回答2: 如果在使用imread函数遇到了不到引用函数的问题,可以尝试以下解决办法: 1. 检查库文件是否正确链接:确认是否正确链接了OpenCV库文件。在代码中,我们需要包含正确的头文件和库文件路径,并与编译器进行正确的链接操作。 2. 确认OpenCV版本:确保你正在使用的是正确版本的OpenCV。不同版本的OpenCV可能有不同的函数命名或位置,如果代码中使用了过函数名,则有可能导致不到引用函数的问题。 3. 更新OpenCV:如果你确定自己使用的是正确的OpenCV版本,但仍然不到引用函数,那么可以尝试更新你的OpenCV版本。新版本的OpenCV可能会修复旧版本中存在的一些问题,以及引入新的函数和功能。 4. 检查代码错误:检查你的代码中是否有错误。有候,编码错误可能导致函数无法找到。比如,可能缺少函数的参数或者错误地定义了函数类型。 5. 检查函数命名和参数:确保在调用imread函数函数名和参数的拼写和格式正确无误。 阅读函数文档和示例代码可以帮助你确定正确的调用方法。 6. 确保图像文件存在和路径正确:确保你要读取的图像文件位于正确的路径下,并且文件名和格式是正确的。如果你指定了错误的路径或文件名,imread函数无法找到图像文件。 通过尝试以上方法,你应该能够解决imread函数不到引用函数的问题。如果以上方法仍然无法解决问题,那么可能需要进一步调试和研究,或者求助于其他开发者。 ### 回答3: 要解决`imread`函数不到引用的问题,可以按照以下步骤进行。 首先,确保已经正确安装和配置了相关的图像处理库。在使用`imread`函数之前,需要先安装和配置OpenCV或其他图像处理库,以便程序能够正确找到和调用相应函数。 其次,检查代码中是否正确引入了相关的头文件。对于OpenCV库,通常需要在代码开头处添加`#include <opencv2/opencv.hpp>`这样的语句来引入库中的函数。 如果以上步骤都正确执行,但仍然无法找到`imread`函数,可能是由于编译或链接错误导致。此,可以尝试重新编译代码,确保编译过程中能够找到链接正确的图像处理库。 另外,还要注意检查是否有拼写错误或语法错误,例如将`imread`错误地拼写为`imread`等。在解决问题,仔细检查代码中函数的拼写和语法,避免简单的错误导致函数无法找到。 最后,如果仍然无法解决`imread`函数不到引用的问题,可以在相关的开发者社区或论坛上寻求帮助。提供更多的细节和错误信息,其他开发者可能会给出更具体的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值