我如何将SOIL(http://lonesock.net/soil.html)链接或编译到Mac OS X上的C++ OpenGL项目中?
我正在尝试使用库,特别是Xcode 4.2.1中的SOIL(简单OpenGL图像库).在Build Phases - > Link Library with Libraries下我添加了SOIL zip存档附带的所有.h和.c文件.
当我构建项目时,我为每个.h和.c文件添加以下错误消息:
警告:跳过文件'/ Users/saw/XcodeProjects/Assignment01 copy/Assignment01/image_DXT.c'(框架和库构建阶段中的意外文件类型'sourcecode.cc')
和链接器错误:
"_SOIL_load_OGL_texture",引自:main.o中的Init()未找到架构x86_64的符号Clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我的用户故事:我想在我的openGL程序中加载纹理.
我的问题:如何在xcode 4.0.2中正确链接SOIL库
所以,过去几天我一直在谷歌上搜索关于xcode4中的链接器警告,并且我无法自己回答 - 所以我敢于在这个主题上发布另一个帖子......(谦虚的初学者在两腿之间掖尾巴).
我的裸骨复制步骤:
我将libSOIL.a拖放到我的项目文件中
我尝试运行程序时收到此警告:
ld:警告:忽略文件/Users/Scott/Developer/Projects/SpaceRanger/Code/Production/lib/libSOIL.a,文件是为存档而构建的,而不是被链接的体系结构(x86_64)
正如我所提到的,我对编程和IDE一般都很陌生,所以我希望在OpenGL中加载纹理的简单方法(例如SOIL)对于SDL甚至GLFW都是有利的.如果我在加载一个图书馆时遇到这种麻烦,那些必须绝对不属于我的联盟.
基于搜索的其他Hit n'Miss尝试:
我担心我开始破坏我的项目只是试图链接这个库.如果有人可以帮我在xcode 4.0.2中正确链接SOIL库,我将永远感激不尽.
提前谢谢你.
-kropcke
我不能让 土壤与Visual Studio 2010中正常工作-我是远从VS方面的专家,但据我所知,只有下面的步骤是必要的,以获得环境工作:
属性>> C/C++>常规>>其他包含目录在SOIL.h的路径中添加
属性>>链接器>>常规>>其他库目录添加到libSOIL.a的路径
我也使用免费的GLUT,并且这里也设置了glut文件的路径 - 我还将Dubugging >> Environment Path设置为GLUT bin文件.
当我使用SOIL_load_OGL_texture时,我收到以下错误:
错误LNK2019:函数"void __cdecl init(void)"中引用了未解析的外部符号_SOIL_load_OGL_texture(?init @@ YAXXZ)
尝试将libSOIL.a重命名为libSOIL.lib和SOIL.lib,但它不起作用.然后,我构建了VC8项目并使用了.lib,如此处所示, SOIL没有正确链接,但这也不起作用.
我正在使用他们主页上的示例代码
GLuint tex_2d;
tex_2d = SOIL_load_OGL_texture
(
" C:\\Sunset.png",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
);
/* check for an error during the load process */
if( 0 == tex_2d )
{
printf( "SOIL loading error: '%s'\n", SOIL_last_result() );
}
Run Code Online (Sandbox Code Playgroud) 我在我的库中链接SOIL但是当我编译时,我得到这些链接器错误:
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library 1>libSOIL.lib(stb_image_aug.o) : error LNK2019: unresolved external symbol __alloca referenced in function _stbi_zlib_decode_noheader_buffer 1>libSOIL.lib(image_helper.o) : error LNK2019: unresolved external symbol _sqrtf referenced in function _RGBE_to_RGBdivA2
我确实在附加依赖项中链接了libSOIL.lib.
我正在制作这个C++程序,它有按钮,按钮容器,聊天框等,我想用纹理包裹它.
我想为我制作的所有矩形生成一个平滑的边缘,我不希望顶点绘图方法为它做的工作,因为它消耗更多的CPU使用而且看起来不是很好,我不知道是否它可以使用纹理坐标(即glTertCoord(u,v)与glVertex2f(x,y) w/c应该只有4,因为它是一个四边形)
我用来加载纹理使用SDL_LoadBMP() w/c只能加载.bmp格式.(我不确定因为它只说LoadBMP).
可以在.BMP格式处理的透明度?如果是的话,该怎么做?
你能告诉我一些代码样本使用SOIL来加载格式.gif的图像或任何其他可以处理图像透明度的格式吗?
四边形可以处理六边形或星形的不规则/多边形形状而不绘制其背景吗?
*如何导入通过c ++ opengl呈现的原始文本框,以便将文本复制到剪贴板中?至于我的节目中的聊天会话.
我创建了自己的库,使用GL_POINTS绘制文本,并且在调整窗口大小时看起来不太好,因为这些点是分散的.这需要const char*
避免文本,#include <*string*>
因为我希望我的程序不依赖于C++的核心功能.
所以更好的解决方案是使用位图绘制它.
有人建议使用图像绘制它,所以我真的需要透明度的东西,因为我希望它只使用四边形绘制.
如何在Ubuntu中为OpenGL链接SOIL?
编辑:
我弄清楚了这个问题,我的教授在终端上显示了定位cmd,然后我找到了必须从中获取.h的位置。
如果有人对我有这个问题,
#include "SOIL/SOIL.h"
Run Code Online (Sandbox Code Playgroud)
并在编译时链接-lSOIL
我一直在尝试为正在使用OpenGL的项目链接SOIL。我正在运行优胜美地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
Run Code Online (Sandbox Code Playgroud)
我的脚步
我遵循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);
Run Code Online (Sandbox Code Playgroud)
我的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 …
Run Code Online (Sandbox Code Playgroud) 我正在做一项要求我使用SOIL的作业.我使用命令安装它sudo apt-get install libsoil-dev
,但当我尝试编译我的程序时,我收到以下错误:
textureMain.cpp:19:18: fatal error: SOIL.h: No such file or directory
compilation terminated.
textureParams.cpp:17:18: fatal error: SOIL.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
为什么即使我安装了SOIL,我也无法编译程序?
我正在尝试保存大小为5x5像素的图像,使用SOIL将glReadPixels读入文件.
我读了像素:
int x = 400;
int y = 300;
std::vector< unsigned char* > rgbdata(4*5*5);
glReadPixels(x, y, 5, 5,GL_RGBA,GL_UNSIGNED_BYTE, &rgbdata[0]);
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用SOIL的保存图像功能保存读取数据
int save_result = SOIL_save_image
(
"image_patch.bmp",
SOIL_SAVE_TYPE_BMP,
5, 5, 4,
rgbdata[0]
);
Run Code Online (Sandbox Code Playgroud)
但是在尝试保存图像时,我得到了一个未处理的异常.
解决方案(Christian Rau)
int x = 400;
int y = 300;
std::vector< unsigned char > rgbdata(4*5*5);
glReadPixels(x-(5/2), y-(5/2), 5, 5,GL_RGBA,GL_UNSIGNED_BYTE, &rgbdata[0]);
int save_result = SOIL_save_image
(
"image_patch.bmp",
SOIL_SAVE_TYPE_BMP,
5, 5, 4,
rgbdata.data()
);
Run Code Online (Sandbox Code Playgroud)