我在Linux中创建了一个共享库(.so),我面临一个非常奇怪的问题。 最初我在库中添加了3个函数(write_myown,setfolder,register),然后我又添加了一些(init,write_re)。Linux上我自己的共享库中的某些函数链接问题
基本上整个库都是用C++实现的,但是这些API需要从基于C和C++的可执行文件中调用。因此我使用extern“C”作为API。
我面临的奇怪问题是,当我尝试使用函数 write_myown,setfolder和register时,链接将通过并创建可执行文件。
但是,当我尝试调用函数init或write_re链接失败,与未定义的引用错误。
即使是我认为但并不确定的陌生事物,我猜想当我构建C程序时它只能正常工作,但是当我构建基于C++的代码时,可以看到此问题。
我已经检查并确认以下事项
- (的.so)在/ usr/lib目录中现有的库(我把它放在那里)
- -p LDCONFIG | grep mylibname显示我的库存在。
- 当我不调用init或write_re时,生成可执行文件,objdump/readelf显示相应的引用。
- ldd在mylibrary.so上同时显示init和write_re都存在,可见性是全局的。
- 创建的可执行文件或.0显示对mylibrary的正确依赖关系。
- 没有版本的mylibrary。
- 我已确认它引用了正确的.so。
- nm在我的库上显示所有功能都存在。
任何想法如何我可以解决这个问题?可能是什么问题。 如果不是我可以继续调查。 请让我知道是否需要任何进一步的细节。
最好的问候, 帕
'write'是'libc.so.6'中的一个函数,'register'是关键字。你应该使用不同的名字... –
如果给出一个C接口,通常让所有的符号共享一个共同的前缀....所以重命名所有的函数,以便tkeir名称以例如“ 'pavan_' –
嗨巴西尔,感谢您的回复,抱歉,我没有使用任何标准函数名称。 – PavanMysore