二进制文件不可执行-C ++和irrklang

问题描述 投票:1回答:1

我在使用irrklang库时遇到问题。我从https://www.ambiera.com/irrklang/downloads.html下载了.zip文件。我有一台配备Mojave 10.14.6的MacBookPro。

我试图编译以下源代码:

#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;
}

我的目录包含

  • main.cpp
  • include->头文件
  • bin->它包括子目录dotnet-4-64macosx-gcclinux-gcc-64winx64-visualStudio
  • bell.wav,getout.ogg
  • Makefile

Makefile非常简单(我从原始.zip文件的examples目录改编了一个:]

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

并且按照预期,二进制文件实际上可以在此OS中执行。我看不到问题,有人有什么建议吗?

c++ makefile binaryfiles irrklang
1个回答
0
投票

dynamiclib选项使gcc生成共享库而不是可执行文件。如您在file ./example的输出中所见,它确实是一个动态链接的共享库,而不是可执行文件。

您应使用-L选项指定库路径。尝试将绝对路径传递到-L选项。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.