gcc 在 lib 中找不到函数
Posted
技术标签:
【中文标题】gcc 在 lib 中找不到函数【英文标题】:gcc cannot find function in lib 【发布时间】:2017-06-27 20:38:26 【问题描述】:我正在尝试使用已安装在树莓派上的 libmbus 制作 C 程序。在我的 /usr/lib 目录中,我有文件 libmbus.so,在我的 /usr/include 目录中,我有文件 ./mbus/mbus.h。
程序如下所示:
#include <stdio.h>
#include <mbus/mbus.h>
int main(void)
mbus_handle* MbusHandle;
MbusHandle = mbus_connect_serial("/dev/ttyS1");
return 0;
当我尝试运行“gcc main.cpp -lmbus”时,我得到:
main.cpp:(.text+0xe): undefined reference to `mbus_connect_serial(char const*)'
我试着跑了
nm -D /usr/lib/libmbus.so
其中有一个
00009930 T mbus_connect_serial
看来函数 mbus_connect_serial 是 libmbus.so 的一部分。
在头文件中函数 mbus_connect_serial 的定义如下:
mbus_handle * mbus_connect_serial(const char * device);
我似乎无法弄清楚出了什么问题。谁能指导我正确的方向?
【问题讨论】:
您的错误信息表明您的问题应该是关于c++
。此外,编译器不是抱怨的人。
你可以试试extern "C" #include <mbus/mbus.h> ;
。你能检查一下mbus.h
是否包含一些extern "C"
指令吗?如果不是,则意味着 C++ 编译器生成 C++ 原型(带参数)而不是 C 原型(不带参数)
哦,这也可能是在 C++ 文件上调用 gcc
的问题:尝试:g++ main.cpp -lmbus
【参考方案1】:
如果你真的想创建一个c
程序,请将main.cpp
重命名为main.c
【讨论】:
这解决了我的问题。谢谢。我不知道 gcc 正在查看文件的扩展名。但是,我用扩展名 .cpp 制作的其他 C 程序没有这个问题。这可能是因为我在这里尝试使用的 lib 的结构吗?g++
和 .cpp
文件表示 c++
。 c++
中的名称修改将阻止链接器在库中查找函数。我不知道这个特定的图书馆,所以我无法帮助你。顺便说一句,如果这解决了您的问题,请接受它作为解决方案。以上是关于gcc 在 lib 中找不到函数的主要内容,如果未能解决你的问题,请参考以下文章
在 GCC 10.3.0 中找不到 _mm256_rem_epu64 内在函数
构建 TensorFlow:bazel 在非标准目录中找不到 libstdc++