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

Compilation g++;链接未定义的引用,即使我的共享对象有这些方法,compilation,linker,g++,shared-objects,Compilation,Linker,G++,Shared Objects,编辑:找到答案。忽略 很抱歉问这个问题,尽管已经问了这么多次,但我已经检查了20多个类似的问题,没有一个有帮助 我已经创建了一个共享对象,现在正在一个链接到该对象的程序中使用它。程序无法链接(ld错误) memfxns.h: #ifndef MEM_H #define MEM_H char* getBuf(); void releaseBuf(char*); #endif #include "memfxns.h" char* getBuffer() { char* ret_v

编辑:找到答案。忽略

很抱歉问这个问题,尽管已经问了这么多次,但我已经检查了20多个类似的问题,没有一个有帮助

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

memfxns.h:

#ifndef MEM_H
#define MEM_H
char* getBuf();
void releaseBuf(char*);
#endif
#include "memfxns.h"

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

void releaseBuffer(char* buf)
{
        delete buf;
}
#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;
}
memfxns.cpp:

#ifndef MEM_H
#define MEM_H
char* getBuf();
void releaseBuf(char*);
#endif
#include "memfxns.h"

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

void releaseBuffer(char* buf)
{
        delete buf;
}
#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;
}
这些家伙是这样编译的,以生成一个共享对象(请注意,我尝试过不使用-soname,因为它似乎是重复的,但没有成功):

现在我想让我的程序与新的链接。因此:

prog.cpp:

#ifndef MEM_H
#define MEM_H
char* getBuf();
void releaseBuf(char*);
#endif
#include "memfxns.h"

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

void releaseBuffer(char* buf)
{
        delete buf;
}
#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;
}
我相当肯定它能够找到libmemfxns.so,因为当我故意调用-lmemfxnsdoesntextest时,它会抱怨找不到.so。我也确信我的-L和-I目录是正确的

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

任何帮助都将不胜感激

谢谢,
-Julian

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

侮辱某人很少有帮助。侮辱自己可能没问题,不过我会换一种说法。