我在使用irrklang图书馆方面有问题。我从.zip下载了https://www.ambiera.com/irrklang/downloads.html文件。我有一个MacBookPro与莫哈韦10.14.6。
我试图编译以下源代码:
#include <stdio.h>
#include <irrKlang.h>
using namespace irrklang;
#pragma comment(lib, "irrKlang.lib") // link with irrKlang.dll
int main(int argc, const char** argv){
printf("\nHello World!\n");
return 0;
}我有一个目录
dotnet-4-64、macosx-gcc、linux-gcc-64、winx64-visualStudioMakefile非常简单(我修改了原始.zip文件的.zip目录中的一个):
CPP = g++
OPTS = -dynamiclib -I"include" -L"bin/macosx-gcc" -lirrklang -pthread
all:
$(CPP) main.cpp -o example $(OPTS)
clean:
rm example我添加了-dynamiclib选项,因为否则链接器会在/usr/lib中搜索库。
当我运行Make时,一切看起来都很好,没有错误,但是如果我试图执行./example,就会得到以下错误:
-bash: ./example: cannot execute binary file我在网上搜索,我发现的唯一提示就是用file ./example检查与我的操作系统的兼容性:结果是
./example: Mach-O 64-bit dynamically linked shared library x86_64正如预期的那样,二进制文件实际上在这个操作系统中是可执行的。我看不出问题所在,有人有什么建议吗?
发布于 2020-03-31 20:38:57
除了这里的另一个答案,还有一件事你需要做。macOS上的动态库包含一个“加载路径”,它告诉操作系统在启动可执行文件链接时在哪里找到所述库来加载它。这个加载路径是从dylib读取并在链接时放入可执行文件中的,这就是为什么要在注释中报告问题的原因。
Apple提供了一个名为install_name_tool的实用程序,用于在链接后修补可执行文件中的加载路径,因此,从您发布的内容来看,您可能需要这样的内容:
install_name_tool -change libirrklang /bin/macosx-gcc/libirrklang example这里有个很好的报道:
https://medium.com/@donblas/fun-with-rpath-otool-and-install-name-tool-e3e41ae86172
发布于 2020-03-30 19:58:13
dynamiclib选项使gcc生成一个共享库,而不是一个可执行文件。正如您在file ./example的输出中所看到的,它确实是一个动态链接的共享库,而不是一个可执行文件。
您应该使用-L选项指定库路径。尝试将绝对路径传递到-L选项。
https://stackoverflow.com/questions/60938209
复制相似问题