- 论坛徽章:
- 0
|
相同的基础库源代码, 在A主机上编译生成了一个基础库 libCbsSysClassD.so, 在B主机上链接该库时报错:
ld: 0711-317 ERROR: Undefined symbol: .CBSDate::CBSDate(int,int,int)
但把基础库源代码拿到B主机上重新生成一次 libCbsSysClassD.so, 该最新生成的库却又可以链接成功了.
从A主机取回的库我用nm指令看了一下:
ocsqa$nm libCbsSysClassD.so | grep "CBSDate::CBSDate"
.CBSDate::CBSDate() T 246948 80
.CBSDate::CBSDate(const char*) T 248680 236
.CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) T 247320 268
.CBSDate::CBSDate(int,int,int) T 247028 128
CBSDate::CBSDate() - 0
CBSDate::CBSDate() D 43600 12
CBSDate::CBSDate(const char*) - 1732
CBSDate::CBSDate(const char*) D 43660 12
CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) - 372
CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) D 43636 12
CBSDate::CBSDate(int,int,int) - 80
CBSDate::CBSDate(int,int,int) D 43612 12
B主机上重新用源代码编译生成的so库我也用 nm指令看了一下:
ocsqa$nm libCbsSysClassD.so | grep "CBSDate::CBSDate"
.CBSDate::CBSDate() T 131300 80
.CBSDate::CBSDate(const char*) T 133036 236
.CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) T 131676 268
.CBSDate::CBSDate(int,int,int) T 131380 132
CBSDate::CBSDate() - 0
CBSDate::CBSDate() D 43916 12
CBSDate::CBSDate(const char*) - 1736
CBSDate::CBSDate(const char*) D 43976 12
CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) - 376
CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) D 43952 12
CBSDate::CBSDate(int,int,int) - 80
CBSDate::CBSDate(int,int,int) D 43928 12
ocsqa$
看起来好像都有 CBSDate::CBSDate(int,int,int) 这样的符号, 据说这种问题往往是由于编译器或者主机环境版本微有不同造成的. 请高人给解释一下怎样看两个 so 库的哪些不同导致了编译报错. |
|