我正在制作一个C ++共享库,当我编译使用该库的主exe时,编译器会给出以下信息:
main.cpp:(.text+0x21): undefined reference to `FooClass::SayHello()'
collect2: ld returned 1 exit status
库代码:
fooclass.h
#ifndef __FOOCLASS_H__
#define __FOOCLASS_H__
class FooClass
{
public:
char* SayHello();
};
#endif //__FOOCLASS_H__
fooclass.cpp
#include "fooclass.h"
char* FooClass::SayHello()
{
return "Hello Im a Linux Shared Library";
}
编译:
g++ -shared -fPIC fooclass.cpp -o libfoo.so
主要:main.cpp
#include "fooclass.h"
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
FooClass * fooClass = new FooClass();
cout<< fooClass->SayHello() << endl;
return 0;
}
编译:
g++ -I. -L. -lfoo main.cpp -o main
该机器是Ubuntu Linux 12
谢谢!
g++ -I. -L. -lfoo main.cpp -o main
是问题。最新版本的GCC要求您按照相互依赖的顺序放置目标文件和库-因此,根据经验法则,必须将库标志作为链接器的最后一个开关;即写
g++ -I. -L. main.cpp -o main -lfoo
代替。
问题内容: 两个共享库liba.so和libb.so。liba.so使用libb.so。所有c文件都使用-fPIC编译。链接使用- shared。当我们在liba.so上调用dlopen时,它无法在libb.so中找到符号…我们得到“未定义符号”错误。我们可以dlopen libb.so没有错误。我们知道liba正在找到libb,因为我们没有得到文件未找到错误。删除libb.so时,出现文件未找到
我正在尝试建立一个共享库,可以用来访问本机蓝牙API函数。我目前正试图编译一个c文件:https://android.googlesource.com/platform/external/bluetooth/bluedroid/ 每当我尝试将这些代码中的任何一个编译为共享库时,我都会收到许多未定义的引用错误...它看起来像是头文件引用的每个函数。在我最近的尝试中,我将整个Bluedroid/bta
问题内容: 这有什么问题吗?我有以下简单的课程: 在运行一个简单的compile()之后,出现以下错误: 在共享库上运行nm表示实际上已找到它: 这是在Ubuntu 12.04上发生的。该 libmnl-dev的 和 libmnl0 包安装。的输出表明正使用该* .so文件: 问题答案: 库必须在使用它们的对象之后列出(更确切地说,仅当库包含满足遇到未定义引用的符号时,才使用库)。将移至命令末尾。
问题内容: 我在使用C ++(Eclipse)的Linux中工作,并且想要使用一个库。Eclipse显示了一个错误: 你知道解决方案吗? 这是我的代码: 问题答案: 您必须针对libdl进行链接,添加 -ldl 到您的链接器选项
问题内容: 我试图将库包含在我的项目中,并且一直面临着同样的问题。我在使用Codeblocks IDE的Ubuntu 12.10上,尝试手动读取站点上的说明来安装库,但是在头文件以及使用前需要构建的库中出现错误。 然后,我通过terminalby安装了库。此后,在我的代码块程序中,可以包含类似的标题,但是当我尝试包含Filesystem库的标题( )时,出现以下错误: 我不确定如何解决此错误(特别
我正试图将库包括在我的项目中,并一直面临着同样的问题。我在使用Codeblocks IDE的Ubuntu12.10上,尝试手动安装库,阅读网站上的说明,但在使用库之前,得到了带有标题的错误以及要构建的错误。 然后,我通过terminalby