博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux c动态库编译好了,不能用。有些方法报(undefined reference)错误。
阅读量:5057 次
发布时间:2019-06-12

本文共 2037 字,大约阅读时间需要 6 分钟。

今天编译mysql的动态库(libodbc.so)编译过了,但当我编译一个应用服务时需链接用到mysql的动态库时就报错:

/home/sc/lib/libodbc.so: undefined reference to `mysql_server_init'

/home/sc/lib/libodbc.so: undefined reference to `mysql_close'
/home/sc/lib/libodbc.so: undefined reference to `mysql_affected_rows'
/home/sc/lib/libodbc.so: undefined reference to `mysql_ping'
/home/sc/lib/libodbc.so: undefined reference to `mysql_real_query'
/home/sc/lib/libodbc.so: undefined reference to `mysql_set_character_set'
/home/sc/lib/libodbc.so: undefined reference to `mysql_free_result'
/home/sc/lib/libodbc.so: undefined reference to `mysql_autocommit'
/home/sc/lib/libodbc.so: undefined reference to `mysql_fetch_field_direct'
/home/sc/lib/libodbc.so: undefined reference to `mysql_real_connect'
/home/sc/lib/libodbc.so: undefined reference to `mysql_store_result'
/home/sc/lib/libodbc.so: undefined reference to `mysql_field_count'
/home/sc/lib/libodbc.so: undefined reference to `mysql_commit'
/home/sc/lib/libodbc.so: undefined reference to `mysql_fetch_row'
/home/sc/lib/libodbc.so: undefined reference to `mysql_error'
/home/sc/lib/libodbc.so: undefined reference to `mysql_server_end'
/home/sc/lib/libodbc.so: undefined reference to `mysql_rollback'
/home/sc/lib/libodbc.so: undefined reference to `mysql_errno'
/home/sc/lib/libodbc.so: undefined reference to `mysql_init'

 

排错:

1. 查看动态库mysql相关的方法:nm libodbc.so|grep mysql 

U   mysql_affected_rows

U   mysql_autocommit
U   mysql_close
U  mysql_commit
U  mysql_errno
U  mysql_error
U    mysql_fetch_field_direct
U    mysql_fetch_row
U    mysql_field_count
U    mysql_free_result
U    mysql_init
U    mysql_ping
U    mysql_real_connect
U    mysql_real_query
U    mysql_rollback
U    mysql_server_end
U    mysql_server_init
U    mysql_set_character_set
U    mysql_store_result

其实这些方法前面的 'U' 代表:该符号未定义过,需要自其他对象文件中链接进来;

这时候在看编译mysql动态库所链接的动态库,发现了链接-L$(MYSQL_LIB),链接时(-L是代表库的路径,而我们这个系统现在根本没有这个环境变量),这个估计是同事在调不同mysql版本时改makefile加上的

将此去掉在重新编译,那些方法前面的 'U' 变成了 'T'代表:该符号放在代码段中,通常是那些全局非静态函数;

 

转载于:https://www.cnblogs.com/samurail/archive/2012/11/13/2767318.html

你可能感兴趣的文章
复习文件操作
查看>>
C#Hashtable与Dictionary性能
查看>>
10个让你忘记 Flash 的 HTML5 应用演示
查看>>
8个Python面试必考的题目,小编也被坑过 ToT
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
centos 图形界面和命令行界面切换(转载)
查看>>
Maven启用代理访问
查看>>
Primary definition
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
发送请求时params和data的区别
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
如何增强你的SharePoint 团队网站首页
查看>>
FZU 1914 Funny Positive Sequence(线性算法)
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>