Compilation g++;链接未定义的引用,即使我的共享对象有这些方法
编辑:找到答案。忽略 很抱歉问这个问题,尽管已经问了这么多次,但我已经检查了20多个类似的问题,没有一个有帮助 我已经创建了一个共享对象,现在正在一个链接到该对象的程序中使用它。程序无法链接(ld错误) memfxns.h: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
#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中的命名不同 侮辱某人很少有帮助。侮辱自己可能没问题,不过我会换一种说法。