未定义对“ calculate()”的引用

时间:2019-12-07 08:56:59

标签: c++ linux shared-libraries linker-errors

我正在创建一个共享库,但是当尝试使用该库时,我得到了对'calculate()'的未定义引用。

该库由几个这样编译的C ++文件组成

g++ -c -fPIC main.cpp a.cpp b.cpp c.cpp

然后变成这样的共享库

g++ -shared -o libtest.so main.o a.o b.o c.o

我有一个名为debug.cpp的文件,试图使用该库

#include "libtest.h"

int main() {
    calculate();
}

标题如下

typedef struct MyStruct {
    float a;
    float b;
    float c;
    float d;
    float e;
    float f;
    float g;
    float h;
} MyStruct;

MyStruct calculate();

在main.cpp中,我有以下内容

extern "C" MyStruct calculate() {
  MyStruct test = {1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5};
  return test;
}

然后当我尝试使用该库时,采用以下方式

g++ debug.cpp -L. -ltest

编译器抱怨

debug.cpp:(.text+0x1f): undefined reference to `calculate()'

当我做nm -g libtest.so时看到

000000000003272b T calculate

我不确定为什么会这样,感谢任何帮助或见解。

0 个答案:

没有答案