Linux C编程问题:symbol lookup error: xxx undefined symbol xxx
程序代码在编译的时候没问题,但是在运行的时候报错:
./bin: symbol lookup error: ./bin: undefined symbol: xxx
百度了一下,貌似是程序运行时使用的动态库和编译时makefile 指定链接的动态库不同所致。用ldd查看文件使用到的库,有很多,但是仔细看 undefined symbol: 后的一串文字:
_ZN10xxx8xxxEPKcz
这里面会说明是哪个符号没有定义(xxx代替),找出这个符号所在的库,修改一下运行时的动态库搜索路径,使之和makefile指定的链接路径一致,就没有问题了。
简单演示
代码目录为:
|-- lib
| |-- func.cpp
| |-- func.h
| `-- makefile
|-- main.cpp
|-- makefile
`-- test.sh
1、头文件func.h
void test();
void test1();
2、源文件func.cpp:
#include <iostream>
#include "func.h"
void test()
{std::cout << "test ok" << std::endl;
}void test1()
{std::cout << "test1 ok" << std::endl;
}
3、main函数:
#include <iostream>
#include "func.h"
int main()
{test();test1();
}
4、顶层makefile:
target=main
lib=-L./lib/ -lfuncOBJ=./lib/func.o
FUNCLIB=./lib/libfunc.so
INCLUDE=-I./lib$(target): main.cpp $(FUNCLIB)g++ -ggdb3 main.cpp -o $@ $(INCLUDE) $(lib)$(FUNCLIB):$(OBJ)g++ -fPIC -shared $^ -o $@$(OBJ):./lib/func.cppg++ -c -fPIC -ggdb3 -o $@ $^clean:rm -rf $(target) $(OBJ) $(FUNCLIB)
5、测试脚本test.sh:
export LD_LIBRARY_PATH=./lib
./main
编译(在顶层目录make)后,脚本执行结果为:
test ok
test1 ok
这里没有问题。
现在将func.cpp的一个函数注释掉:
头文件func.h:
void test();
//void test1();
源文件func.cpp:
#include <iostream>
#include "func.h"
void test()
{std::cout << "test ok" << std::endl;
}//void test1()
//{
// std::cout << "test1 ok" << std::endl;
//}
单独在lib目录下创建一个makefile:
target=libfunc.so
obj=func.o$(target):$(obj)g++ -shared -fPIC -o $@ $^$(obj):func.cppg++ -fPIC -c $^ -o $@clean:rm -rf $(target) $(obj)
编译,此时libfunc.so文件更新了
再回到上次目录,执行脚本,此时就会报错:
test ok
./main: symbol lookup error: ./main: undefined symbol: _Z5test1v
从 undefined symbol 后面的信息来看,是test1没有定义,所以根据这个定位到是库文件libfunc.so的问题,这个问题是编译时用到的动态库,和运行时不一致,导致的错误。
参考:
"symbol lookup error"问题解决
Linux C编程问题:symbol lookup error: xxx undefined symbol xxx相关推荐
- psql error: psql: symbol lookup error: psql: undefined symbol: PQconnectdbParams
linux遇到一个Postgresql的问题,在调用pg_restore时: ./pg_restore -h 127.0.0.1 -p 5432 -U postgres -v -d dbname /u ...
- symbol lookup error: undefined symbol:PySlice_Unpack
报错信息: symbol lookup error:xxx/lib/python3.6/site-packages/torch/lib/libtorch_python.so: undefined sy ...
- ubuntu 16.04使用IntelRealSense D435i调用realsense ROS包时,报symbol lookup error和undefined symbol错误的解决办法
在ubuntu 16.04使用IntelRealSense D435i调用realsense ROS包时,运行 roscore roslaunch realsense2_camera rs_rgbd. ...
- 链接的接口——符号(一)链接错误:symbol lookup error: xxx, undefined symbol: xxx
问题 在ubuntu16电脑上运行编译好的qt demo出报错 错误信息如下: ./abc_product: symbol lookup error: ./abc_prodcut: undefined ...
- symbol lookup error
今天编译代码时出现这样的错误提示: "./test: symbol lookup error: ./test: undefined symbol: --" 问题原因是:test使用 ...
- linux 32位系统运行eclipse报错:eclipse: symbol lookup error,.so: undefined symbol: XXXg_bus_own_name
接上一个文章寻找合适的eclipse linux32位软件安装包之后https://blog.csdn.net/fighting_Kitty/article/details/127412246,运行e ...
- 转载--解决gedit: symbol lookup error: /home/xxx/libgobject-2.0.so.0: undefined symbol: g_date_copy问题
操作系统:Ubuntu 16.04 问题描述: 在终端启动gedit命令或者vscode命令报错:gedit: symbol lookup error: /home/chujie/anaconda3/ ...
- python: symbol lookup error
还是说一下环境吧: ubuntu16.04, cuda9.0,cudnn7.0,anaconda3.6,Python2.7,pytorch1.0.1 报错显示 python: symbol looku ...
- SDK ..\OBJ\XXX.axf: Error: L6218E: Undefined symbol XXXX (referred from XXX.o).
STM32 MDK 编译时出现: 主要时变量传递问题,中断函数B,调用主函数main中的变量,虽然B中用了extern main.c中 int main(void) { u16 a=1200; } e ...
最新文章
- [转] Zend studio中开发常用
- redis internal【转】
- curl请求模拟post发送json
- Spring中RedirectAttributes的用法
- margin百分比,重叠和auto
- CSS设置文本字体居中
- appscan无法连接到服务器_对于csgo无法连接到任意服务器解决办法
- 联想小新模式切换不了_小新Pro 14 2021正式发布,联想举行秋季新品发布会,10款新品齐亮相...
- linux7离线安装docker19,centos7离线安装docker
- pygame精灵组有哪些方法_利用 pygame 开发一款游戏:「跳跳兔」(六)
- ubuntu常见问题有效解决办法
- MediaWiki搭建指导
- iOS微信小程序网页请求走error问题
- 【UI】10套抗疫图标,疫情图标,图标素材(免费)!
- React Native之携程Moles框架
- 公司有打算使用神州数码的EasyFlow工作流管理系统
- 数据仓库工程师基本技能
- html中搜索符号,html中特殊符号
- Python中return返回值的简单用法
- 一种夸张的炒股计算方法