一个诡异的连接时找不到符号的问题

C++语言 码拜 5年前 (2016-06-07) 569次浏览
在ubuntu调用别的部门编写的so文件。连接时提示

In function `CExpoLibWrapper::CExpoLibWrapper(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)":
ExpoLibWrapper.cpp:(.text+0xff): undefined reference to `MessageBus::IAppServer::IAppServer(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)"

编译命令为

g++ -o tester.out ExpoLibWrapperMain.cpp ExpoLibWrapper.cpp -L. -lExpo

使用nm命令产看函数的导出情况显示已经导出了(第二条和第五条)

nm -CD libExpo.so| grep "MessageBus::IAppServer::IAppServer"
00000000001aef94 T MessageBus::IAppServer::IAppServer(std::tr1::shared_ptr<Expo::IClient>)
00000000001afc7e T MessageBus::IAppServer::IAppServer(std::string const&)
00000000001afada T MessageBus::IAppServer::IAppServer(unsigned short, unsigned short, unsigned short)
00000000001aef5a T MessageBus::IAppServer::IAppServer(std::tr1::shared_ptr<Expo::IClient>)
00000000001afd40 T MessageBus::IAppServer::IAppServer(std::string const&)
00000000001afbac T MessageBus::IAppServer::IAppServer(unsigned short, unsigned short, unsigned short)

本人的部分代码如下:

class CExpoLibWrapper: public MessageBus::IAppServer
{
private:
	CExpoLibWrapper(const CExpoLibWrapper&);
	CExpoLibWrapper& operator= (const CExpoLibWrapper&);
	ServerState m_serverstate;
public:
	CExpoLibWrapper(const std::string& url);
	CExpoLibWrapper(unsigned short classID, unsigned short Count1, unsigned short Count2);
	virtual ~CExpoLibWrapper();
};
//CExpoLibWrapper g_wrapper(1,2,2);
CExpoLibWrapper g_wrapper("Cfg.xml");
void main()
{}

使用CExpoLibWrapper g_wrapper(1,2,2); 不会导致链接错误。
使用CExpoLibWrapper g_wrapper(“Cfg.xml”);则会导致上述错误。
看上去像是第一种基类的构造函数没有实现。可是本人无从查看其他部门的代码。问一下有人遇到过相似情况吗?或其他原因会导致上述问题。谢谢了!

解决方案

10

编译器能否同一个版本?
最好使用 .a 静态库编译

10

http://bbs.csdn.net/topics/392004872
应该和这个是同一具问题,lib和程序的字符集不一致

8

直接调用IAppServer(std::string const&)看看咯,不行那大致就是找不到定义了。那应该可以跟其他部门反映的吧

12

最好拿源码一起编译,最差也要保证编译器版本、引用的标准库以及编译选项一致,例如
-std=c++11
这样的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明一个诡异的连接时找不到符号的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)