【问题标题】:Getting linker error between two .so files in linux在linux中的两个.so文件之间获取链接器错误
【发布时间】:2019-09-23 15:46:52
【问题描述】:

我有两个 .so 文件,我试图从一个 .so 到另一个调用参数化构造函数。我收到链接器错误。这是一段代码。

ABC.h

class ABC
  {
     ABC();
     ABC(int i);
};

ABC.cpp

ABC::ABC()
{
   //do something
}
ABC::ABC(int i)
{
   //do something.
}

XYZ.cpp

#include "ABC.h"
void XYZ1()
{
    ABC abc();          // this passes
}
void XYZ1(int i)
{
    ABC abc(i);         // This results in linker error when I run XYZ's executable
}
void main()
{
    XYZ1();
}

请注意,我使用的是 netbeans IDE。 我注意到参数化构造函数会导致错误,默认构造函数不会抛出任何错误。我需要在 netbeans IDE 中进行任何设置吗?

【问题讨论】:

  • 最麻烦的解析会将ABC abc(); 视为函数声明——已声明但未定义。也许以下ABC abc(i); 与此混淆?尝试将ABC abc(); 替换为ABC abc;ABC abc{};。不确定这是否会成功,但值得一试。
  • 请发布您是如何编译代码的;以及您正在运行的实际代码(例如,您的 ABC.h 错过了 ;)。
  • @Fureeish 即使只有一个没有默认构造函数的参数化构造函数也会导致链接器错误
  • 你是如何链接代码的?
  • @Fureeish 我正在使用 LDLIBSOPTIONS 选项,并且我在 makefile 中提到了 so 名称。

标签: c++ linker-errors netbeans-8


【解决方案1】:

你的构造函数是私有的,因此它不能被调用

【讨论】:

    【解决方案2】:

    我发现了问题,XYZ.so 文件在错误的位置寻找 ABC.so,这就是它无法正确链接的原因。它在其他位置查找的原因是因为在“LD_LIBRARY_PATH”中设置了路径,在该路径中存在不同版本的 ABC.so。

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 2010-11-27
      • 2014-06-07
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多