g ++链接未定义的引用,即使我的共享对象具有这些方法

时间:2013-03-18 11:38:43

标签: compilation linker g++ shared-objects

编辑:找到答案。忽略

很抱歉提出这个问题,即使它被问了很多次,但我已经检查了20多个类似的问题,而且没有一个问题有帮助。

我已创建了一个共享对象,现在正在一个链接到该.so的程序中使用它。该程序无法链接(ld错误)。

memfxns.h:

#ifndef MEM_H
#define MEM_H
char* getBuf();
void releaseBuf(char*);
#endif

memfxns.cpp:

#include "memfxns.h"

char* getBuffer()
{
        char* ret_val = new char[4];
        //fill the buffer here
        return ret_val;
}

void releaseBuffer(char* buf)
{
        delete buf;
}

这些人被编译为这样生成一个共享对象(注意我已经尝试过没有-soname,因为它似乎是重复的,但没有成功):

g++ -Wall -fPIC -c ./*.cpp
g++ -shared -Wl,-soname,libmemfxns.so -o ./libmemfxns.so ./*.o

现在我想让我的程序链接到新的.so:

prog.cpp:

#include <stdio.h>
#include "memfxns.h"

int main()
{
        char* buf = getBuf();
        for(int i = 0; i < 4; i++)
                printf("%d\n", buf[i]);
        releaseBuf(buf);

        return 0;
}

我使用命令编译:

g++ ./prog.cpp -o prog -I/home/jbu/Desktop/hadooprelated/testjna/so/include -L/home/jbu/Desktop/hadooprelated/testjna/so -lmemfxns
/tmp/ccOR12i1.o: In function `main':
prog.cpp:(.text+0x9): undefined reference to `getBuf()'
prog.cpp:(.text+0x55): undefined reference to `releaseBuf(char*)'
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

我很确定它能够找到libmemfxns.so因为当我故意调用-lmemfxnsdoesntexist时它会抱怨它无法找到.so。我也确定我的-L和-I目录是正确的。

我不确定我的头文件中是否需要某种命名空间/作用域但我还没有看到需要的示例......

非常感谢任何帮助。

谢谢, -Julian

1 个答案:

答案 0 :(得分:3)

哇看看这个白痴,他在标题中的方法名称与他们在.cpp中命名的方式不同。