在Yosemite中将SOIL与g ++联系起来的问题

时间:2015-09-16 03:52:06

标签: c++ macos opengl soil

我一直试图将SOIL与我正在使用的OpenGL项目联系起来。我正在运行Yosemite 10.10.4。

当我尝试在代码中使用SOIL库时,出现以下错误(已更新):

ld: warning: ignoring file /usr/local/lib/libSOIL.a, 
file was built for archive which is not the architecture being linked (x86_64): /usr/local/lib/libSOIL.a
Undefined symbols for architecture x86_64:
"_SOIL_load_image", referenced from:
  init() in main-93f615.o
ld: symbol(s) not found for architecture x86_64

我的步骤

我按照SOIL中的make文件指示的进程:make,make install。它将libSOIL.a文件放在/ usr / local / lib和SOIL.h中的/ usr / local / include中。我包含在我的代码中:

#include "SOIL.h"

int width, height;
unsigned char* image = SOIL_load_image("CrayonBox2.png", &width, &height, 0, SOIL_LOAD_RGB);

我的Makefile包含这个g ++目标:

g++ -I/usr/X11R6/include -I/usr/local/include -I/opt/local/include -L/usr/local/lib/ -L/opt/local/lib -lSOIL -framework GLUT -framework OpenGL -framework CoreFoundation -o main main.cpp

然后出现上述错误。

然后我尝试了许多不同的东西:我安装了this guy's version of SOIL for Mac OS(它将libSOIL.a和libSOIL.dylib放在/ opt / local / lib中,SOIL.h放在/ opt / local / include中);我尝试添加'-arch 1386 -arch x86_64' as per this answer's suggestion。对于其中的每一个,我仍然会收到与以前相同的错误。

关于可能出现什么问题的任何建议?

3 个答案:

答案 0 :(得分:1)

我有同样的问题,我的解决方案是修改makefile,让gcc支持64通过添加-m64。

另见Simple OpenGL Image Library / projects / makefile / makefile:

CXXFLAGS = -O2 -s -Wall -m64

再次安装并替换libSOIL.a。

我希望答案可以帮助你。

答案 1 :(得分:0)

在库规范(-l-L)之前指定源文件

g++ main.cpp -I/usr/X11R6/include -I/usr/local/include -I/opt/local/include \
    -L/usr/local/lib/ -L/opt/local/lib -lSOIL -framework GLUT \
    -framework OpenGL -framework CoreFoundation

您可能需要-o myexe,否则输出文件将为a.out ...

答案 2 :(得分:0)

您可能正在使用预编译的静态库。 最好为您的系统编译SOIL。一个非常常见的编译管道是使用CMake和Make。 克隆https://github.com/DeVaukz/SOIL移至下载的目录。

mkdir build
cd build
cmake ..
make
sudo make install