Yosemite 中通过 g++ 链接 SOIL 的问题
Issues linking SOIL through g++ in Yosemite
我一直在尝试 link 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 (which places libSOIL.a and libSOIL.dylib in /opt/local/lib and SOIL.h in /opt/local/include); I tried adding '-arch 1386 -arch x86_64'
as per this answer's suggestion。对于其中的每一个,我仍然收到与以前相同的错误。
关于可能的问题有什么建议吗?
在库规范(-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
...
我有同样的问题,我的解决办法是修改makefile,通过添加-m64让gcc支持64。
另见简单 OpenGL 图像 Library/projects/makefile/makefile:
CXXFLAGS = -O2 -s -Wall -m64
重新安装并替换 libSOIL.a。
希望回答对您有所帮助
您可能正在使用预编译的静态库。
最好为您的系统编译 SOIL。一个非常常见的编译管道是使用 CMake 和 Make。
克隆 https://github.com/DeVaukz/SOIL 移动到下载的目录。
mkdir build
cd build
cmake ..
make
sudo make install
我一直在尝试 link 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 (which places libSOIL.a and libSOIL.dylib in /opt/local/lib and SOIL.h in /opt/local/include); I tried adding '-arch 1386 -arch x86_64'
as per this answer's suggestion。对于其中的每一个,我仍然收到与以前相同的错误。
关于可能的问题有什么建议吗?
在库规范(-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
...
我有同样的问题,我的解决办法是修改makefile,通过添加-m64让gcc支持64。
另见简单 OpenGL 图像 Library/projects/makefile/makefile:
CXXFLAGS = -O2 -s -Wall -m64
重新安装并替换 libSOIL.a。
希望回答对您有所帮助
您可能正在使用预编译的静态库。 最好为您的系统编译 SOIL。一个非常常见的编译管道是使用 CMake 和 Make。 克隆 https://github.com/DeVaukz/SOIL 移动到下载的目录。
mkdir build
cd build
cmake ..
make
sudo make install