我目前正在尝试使用FMOD音频库编写一个小程序,但我很难理解如何链接它们。
我有一个小程序,如下所示
#include "/home/me/fmod_test/api/lowlevel/inc/fmod.h"
#include "/home/me/fmod_test/api/lowlevel/inc/fmod.hpp"
#include "/home/me/fmod_test/api/lowlevel/inc/fmod_errors.h"
#include <iostream>
using namespace std;
int main()
{
FMOD::System *system;
FMOD::Sound *sound1;
FMOD::System_Create(&system); // create an instance of the game engine
}
但是当我尝试使用
进行编译时g++ -L/home/me/fmod_test/api/lowlevel/lib/x86_64 -lfmod -lfmodL test.cpp -o test
我收到这样的错误
In function `FMOD::System_Create(FMOD::System**)':
test.cpp:(.text._ZN4FMOD13System_CreateEPPNS_6SystemE[_ZN4FMOD13System_CreateEPPNS_6SystemE]+0x14): undefined reference to `FMOD_System_Create'
我添加了屏幕截图,表明这些库和标题确实存在于我的系统中
有趣的是,如果我注释掉System_Create调用,FMOD :: System和Sound初始化仍然可以正常工作。
我链接不正确,我无法弄清楚为什么这不起作用(是的,我按照uname -a的输出在x86_64架构上)
答案 0 :(得分:0)
g++ -L/home/me/fmod_test/api/lowlevel/lib/x86_64 -lfmod -lfmodL test.cpp -o test
此命令行是向后的。正如this answer中所解释的,库必须在命令行上跟踪源文件和对象文件(答案说顺序对共享库无关紧要,但答案部分是错误的(对于至少一些连接器))。尝试:
g++ -L/home/me/fmod_test/api/lowlevel/lib/x86_64 test.cpp -o test -lfmod -lfmodL