我有一个程序可以使用另一个.so libary
来创建一个.so库但是当它运行时,它会显示以下错误:
symbol lookup error: ./libctp.so: undefined symbol: _ZN15CThostFtdcMdApi15CreateFtdcMdApiEPKcbb
然后我发现我的.so实际上并没有与另一个人联系。所以 我用ldd来检查它:
$ldd libctp.so
linux-vdso.so.1 => (0x00007fff2b7db000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f736b082000)
/lib64/ld-linux-x86-64.so.2 (0x00007f736b649000)
没有thostmduserapi.so那里!它没有给我制作场景,所以我试图不使用GYP来生成makefile。相反,我手动输入命令来编译它,如下所示:
$ g++ -fPIC -shared main.cpp -l:thostmduserapi.so -Wl,-rpath,. -o libctp.so
有效!
$ ldd libctp.so
linux-vdso.so.1 => (0x00007ffc0f6cb000)
thostmduserapi.so (0x00007fb3cde36000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb3cda71000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb3cd853000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb3cd64b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb3cd447000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb3cd143000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb3cce3d000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb3ccc27000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb3ce5dd000)
thostmduserapi.so就在那里!!
但是GYP生成的makefile怎么没跟thostmduserapi.so链接!?? 这对我来说似乎很奇怪。有谁知道GYP的项目会发生什么?
提前感谢您的帮助!
这是我的GYP文件:
{
'targets': [
{
'target_name': 'ctp',
'type': 'shared_library',
'include_dirs': [
'../../../',
],
'sources': [
'main.cpp',
],
'product_dir': '../../../deploy',
'ldflags': [
'-l:thostmduserapi.so',
'-L../../../third_party/ctp/linux64',
'-Wl,-rpath,.',
],
'cflags': [
'-fPIC',
'-std=c++11',
],
},
],
}
这是我的.so库的代码
#include <third_party/ctp/linux64/include/ThostFtdcMdApi.h>
#include <stdio.h>
void* get_exchange_api(){
printf("test\n");
CThostFtdcMdApi::CreateFtdcMdApi(); // <-- function in thostmduserapi.so
return 0;
}
答案 0 :(得分:0)
尝试设置libraries
和library_dirs
而不是ldflags
操作:
{
'targets': [
{
'target_name': 'ctp',
'type': 'shared_library',
'include_dirs': [
'../../../',
],
'sources': [
'main.cpp',
],
'product_dir': '../../../deploy',
'library_dirs': ['../../../third_party/ctp/linux64'],
'libraries': ['thostmduserapi'],
'cflags': [
'-fPIC',
'-std=c++11',
],
},
],