linux 静态链接 mysql glibc 库的悲催过程

本文讲述了在CentOS 5.8环境下尝试静态链接MySQL库时遇到的困难,包括krb5库的缺失和glibc中dlopen函数导致的问题。通过手动编译安装MySQL并调整链接参数,解决了大部分问题,但仍存在因静态链接glibc库导致的警告和运行时问题。最终采取折中方案,将MySQL等部分库静态链接,而glibc等基础库保持动态链接。
摘要由CSDN通过智能技术生成

这两天需要把项目做成静态链接版本,便于在各公司的各种linux平台上运行。

我想这还不简单,链接参数加一个-static不就行了,但接下来解决一系列问题的时间远远超出我的意料linux 静态链接 mysql glibc 库的悲催过程 - mango - 屋基坡公爵

开发环境:

CentOS release 5.8 (Final)

gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52)

问题是由于静态链接mysql库引起的,我链接mysql库的参数是这样写的:

LIB_MYSQL     = $(shell mysql_config --libs)

发现静态链接悲剧了,好几百个链接错误,都是undefined,需要krb5库。链接加上krb5库:

LIB_KBR5     = $(shell krb5-config --libs)

最终部分链接参数是这样的:$(LIB_MYSQL) $(LIB_KBR5) $(LIB_THREAD) -static

结果链接器还是报错:

/usr/lib64/libkrb5.a(cc_keyring.o): In function `krb5_krcc_get_principal':
(.text+0xfaa): undefined reference to `keyctl_read_alloc'
/usr/lib64/libkrb5.a(cc_keyring.o): In function `krb5_krcc_getkeycount':
(.text+0x1129): undefined reference to `keyctl_read'
/usr/lib64/libkrb5.a(cc_keyring.o): In function `krb5_krcc_clearcache':
(.text+0x1194): undefined reference to `keyctl_clear'
/usr/lib64/libkrb5.a(cc_keyring.o): In function `krb5_krcc_clearcache':
(.text+0x11c1): undefined reference to `keyctl_clear'
/usr/lib64/libkrb5.a(cc_keyring.o): In function `krb5_krcc_resolve':
(.text+0x1692): undefined reference to `request_key'
/usr/lib64/libkrb5.a(cc_keyring.o): In function `krb5_krcc_resolve':
(.text+0x16bb): undefined reference to `keyctl_read'
/usr/lib64/libkrb5.a(cc_keyring.o): In function `krb5_krcc_resolve':

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值