程序代码在编译的时候没问题,但是在运行的时候报错:

./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相关推荐

  1. 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 ...

  2. symbol lookup error: undefined symbol:PySlice_Unpack

    报错信息: symbol lookup error:xxx/lib/python3.6/site-packages/torch/lib/libtorch_python.so: undefined sy ...

  3. 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. ...

  4. 链接的接口——符号(一)链接错误:symbol lookup error: xxx, undefined symbol: xxx

    问题 在ubuntu16电脑上运行编译好的qt demo出报错 错误信息如下: ./abc_product: symbol lookup error: ./abc_prodcut: undefined ...

  5. symbol lookup error

    今天编译代码时出现这样的错误提示: "./test: symbol lookup error: ./test: undefined symbol: --" 问题原因是:test使用 ...

  6. 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 ...

  7. 转载--解决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/ ...

  8. python: symbol lookup error

    还是说一下环境吧: ubuntu16.04, cuda9.0,cudnn7.0,anaconda3.6,Python2.7,pytorch1.0.1 报错显示 python: symbol looku ...

  9. 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 ...

最新文章

  1. [转] Zend studio中开发常用
  2. redis internal【转】
  3. curl请求模拟post发送json
  4. Spring中RedirectAttributes的用法
  5. margin百分比,重叠和auto
  6. CSS设置文本字体居中
  7. appscan无法连接到服务器_对于csgo无法连接到任意服务器解决办法
  8. 联想小新模式切换不了_小新Pro 14 2021正式发布,联想举行秋季新品发布会,10款新品齐亮相...
  9. linux7离线安装docker19,centos7离线安装docker
  10. pygame精灵组有哪些方法_利用 pygame 开发一款游戏:「跳跳兔」(六)
  11. ubuntu常见问题有效解决办法
  12. MediaWiki搭建指导
  13. iOS微信小程序网页请求走error问题
  14. 【UI】10套抗疫图标,疫情图标,图标素材(免费)!
  15. React Native之携程Moles框架
  16. 公司有打算使用神州数码的EasyFlow工作流管理系统
  17. 数据仓库工程师基本技能
  18. html中搜索符号,html中特殊符号
  19. Python中return返回值的简单用法
  20. 一种夸张的炒股计算方法

热门文章

  1. 生产者消费者问题C++实现
  2. 计算机工程博士学校,计算机工程博士
  3. qq邮箱加入安徽大学教育邮箱
  4. LINUX 用户认证
  5. python三门问题_如何用 Python 解读著名的“三门问题”?
  6. (搬运)大学物理实验理论部分知识点)
  7. G4激光雷达数据解析以及与单片机的通讯方法
  8. 米尔格拉姆实验(Milgram experiment)
  9. Java贪吃蛇应用的设计与实现
  10. WIN7封装教程2018系列(七)—测试效果