当前位置: 技术问答>linux和unix
关于静态链接库加载的问题
来源: 互联网 发布时间:2016-10-08
本文导语: 各位好! 我这边一个程序使用了Oracle的libclntsh.a库,程序是使用静态链接的方式 但是运行的时候,报如下错误: ./conn_pool exec(): 0509-036 Cannot load program ./conn_pool because of the following errors: 0509-150...
各位好!
我这边一个程序使用了Oracle的libclntsh.a库,程序是使用静态链接的方式
但是运行的时候,报如下错误:
./conn_pool
exec(): 0509-036 Cannot load program ./conn_pool because of the following errors:
0509-150 Dependent module /ora9i/app/oracle/product/9.2/lib32/libclntsh.a(shr.o) could not be loaded.
0509-103 The module has an invalid magic number.
我琢磨了很久,发现把环境变量LIBPATH由/ora9i/app/oracle/product/9.2/lib32改成/ora9i/app/oracle/product/9.2/lib
就不会出错,所以也基本上定位出问题:我程序使用64位编译,而/ora9i/app/oracle/product/9.2/lib32下的libclntsh.a使用32位编译。
但有个问题搞不清楚,如果这是在链接的过程报错就合理了,为什么会在运行时报加载libclntsh.a库出错呢?这是静态链接的方式,库的代码应该已经添加到可执行程序了,运行的时候应该不需要加载libclntsh.a库才对,为什么这个程序会在运行时加载静态链接库呢?
公司好多人都问过了,不懂,特地来求教高手,嘿嘿。。。。。。
我这边一个程序使用了Oracle的libclntsh.a库,程序是使用静态链接的方式
但是运行的时候,报如下错误:
./conn_pool
exec(): 0509-036 Cannot load program ./conn_pool because of the following errors:
0509-150 Dependent module /ora9i/app/oracle/product/9.2/lib32/libclntsh.a(shr.o) could not be loaded.
0509-103 The module has an invalid magic number.
我琢磨了很久,发现把环境变量LIBPATH由/ora9i/app/oracle/product/9.2/lib32改成/ora9i/app/oracle/product/9.2/lib
就不会出错,所以也基本上定位出问题:我程序使用64位编译,而/ora9i/app/oracle/product/9.2/lib32下的libclntsh.a使用32位编译。
但有个问题搞不清楚,如果这是在链接的过程报错就合理了,为什么会在运行时报加载libclntsh.a库出错呢?这是静态链接的方式,库的代码应该已经添加到可执行程序了,运行的时候应该不需要加载libclntsh.a库才对,为什么这个程序会在运行时加载静态链接库呢?
公司好多人都问过了,不懂,特地来求教高手,嘿嘿。。。。。。
|
也许它只是一个.a的后缀,实质上还是动态库..