[英]Issues with linking to certain functions in my own shared library on Linux
我在Linux中创建了一个共享库(.so),我面临一个非常奇怪的问题。 最初,我在库中添加了3个函数(write_myown,setfolder,register),然后又添加了一些函数(init,write_re)。
基本上,整个库都是用C ++实现的,但是需要从基于C和C ++的可执行文件中调用API。 因此,我将extern“ C”用于API。
我面临的一个奇怪的问题是,当我尝试使用函数write_myown,setfolder和register时,链接通过并创建了可执行文件。
但是,当我尝试调用函数init或write_re时,链接失败,并出现未定义的引用错误。
我认为但不确定的甚至更奇怪的事情是,我猜我在构建仅C程序时工作正常,但是在构建基于C ++的代码时,就会看到此问题。
我已经检查并确认以下事项
知道我该如何解决吗? 可能是什么问题。 如果没有,我该如何进行调查。 如果需要其他详细信息,请告诉我。
最好的问候,帕万
我面临的一个奇怪的问题是,当我尝试使用函数write_myown,setfolder和register时,链接通过并创建了可执行文件。
但是,当我尝试调用函数init或write_re时,链接失败,并出现未定义的引用错误。
我的write_myown
说:当您在.h
文件中为write_myown
和setfolder
编写原型时,已在它们中添加了extern "C"
。
但是,当您以后添加write_re
,您将extern "C"
放在.cc
文件中的定义中,但忽略了将其添加到.h
的原型中。
如果是这样的话,
C
可执行文件可以很好地使用它们,并且 C++
引用它们(库外)对象没有看到extern "C"
上他们,因此希望其受到损坏的形式(这是不被库提供当然)。 我认为这个假设适合您问题中的所有事实,并且很难验证:来自链接器的错误消息是说undefined symbol: write_re
还是说undefined symbol: write_re(some, parameter, types)
?
如果是后者,那是一些对象引用错位名称的破绽。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.