这个问题不是 Fubi 特有的,而是一般的链接器问题。过去几天(读作 5 天)充满了链接错误,但我设法将其缩小到少数几个。
我正在尝试在 Linux 环境下编译 Fubi(全身交互框架)。它只在 Windows 7 上进行了测试,并且网络缺乏在 *nix 平台上编译的资源。
现在,就像我上面提到的那样,我遇到了大量的链接问题,这些问题主要涉及不正确的 g++ 标志。Fubi 需要 OpenNI 和 NITE(以及 OpenCV,如果你愿意的话)来提供它的基本功能。我已经能够成功地编译来自 OpenNI 和 NITE 框架的两个样本。
据我了解,Fubi 是一个框架,因此我需要编译一个共享库而不是二进制文件。
当我尝试使用以下命令将其编译为二进制文件时
g++ *.cpp -lglut -lGL -lGLU -lOpenNI -lXnVNite_1_5_2 -I/usr/include/nite -I/usr/include/ni -I/usr/include/GL -I./GestureRecognizer/ -o FubiBin
我得到位于此处的输出。(有点长,我不想破坏格式)
如果我改为编译成目标文件(-c 标志),则不会出现错误并且它会成功构建目标文件。请注意,我正在使用以下命令:
g++ -c *.cpp -lglut -lGL -lGLU -lOpenNI -lXnVNite_1_5_2 -I/usr/include/nite -I/usr/include/ni -I/usr/include/GL -I./GestureRecognizer/
然后我可以使用该ar
命令生成一个静态链接库。没有错误[可能]发生(这只是我的猜测)因为它还没有通过链接器运行,所以这些错误不会出现。
感谢您耐心阅读所有内容。最后,提问时间:
1)尝试编译为二进制文件时,第一个错误是关于未定义对 main normal 的引用吗?我搜索了该文件夹中的所有文件,但没有一个主要功能存在。
2)其余未定义的参考错误抱怨他们找不到提到的功能。所有这些函数都位于子目录GestureRecognizer/中的 .cpp 和 .h 文件中,这是我正在编译的路径的子目录。那么参数不会解决-I./GestureRecognizer/
这个问题吗?
我想确保当我创建共享库时,在运行时不会出现任何链接问题。如果最初链接正确,所有这些错误在尝试编译为二进制文件时会消失吗?