Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为Linux编译时Assimp aiString为空 我正在研究一个简单的OpenGL项目,我是C++新手。我一直在缓慢地向一个非常简单的原始3D“引擎”添加功能,并努力确保它能够跨平台编译_C++_Linux_Opengl_Cross Platform_Assimp - Fatal编程技术网

为Linux编译时Assimp aiString为空 我正在研究一个简单的OpenGL项目,我是C++新手。我一直在缓慢地向一个非常简单的原始3D“引擎”添加功能,并努力确保它能够跨平台编译

为Linux编译时Assimp aiString为空 我正在研究一个简单的OpenGL项目,我是C++新手。我一直在缓慢地向一个非常简单的原始3D“引擎”添加功能,并努力确保它能够跨平台编译,c++,linux,opengl,cross-platform,assimp,C++,Linux,Opengl,Cross Platform,Assimp,我有一个为OSX和Linux(Ubuntu)运行的make文件,为Windows我修改了一个VisualStudio解决方案文件,以便与项目的目录结构配合使用 每次进行更改时,我都会确保在每个平台上进行编译和测试,在我使用ASIMP添加对负载模型的支持之前,这一切都非常棒。更具体地说,加载模型很好,但加载纹理是导致问题的原因——或者更确切地说,读取纹理文件名 奇怪的是,这段代码实际上在我瞄准的所有平台上都能正常运行和编译:Linux(Ubuntu)、OSX和Windows 10——除了在Ubun

我有一个为OSX和Linux(Ubuntu)运行的make文件,为Windows我修改了一个VisualStudio解决方案文件,以便与项目的目录结构配合使用

每次进行更改时,我都会确保在每个平台上进行编译和测试,在我使用ASIMP添加对负载模型的支持之前,这一切都非常棒。更具体地说,加载模型很好,但加载纹理是导致问题的原因——或者更确切地说,读取纹理文件名

奇怪的是,这段代码实际上在我瞄准的所有平台上都能正常运行和编译:Linux(Ubuntu)、OSX和Windows 10——除了在Ubuntu(并且仅在Ubuntu中)中,来自Assimp的
aiString
对象似乎没有返回纹理文件的名称

这是我缩小范围的代码片段,它真正显示了我的问题:

aiString path;
mat->GetTexture(aiTextureType_DIFFUSE, 0, &path);
fprintf(stderr, "Loading texture '%s'...\n", path.data);   
std::string full_path = _model_load_path + std::string(path.C_Str());
fprintf(stderr, "Full path: '%s'\n", full_path.c_str());   
这是OSX和Windows 10上的输出:

加载纹理“glass_dif.png”。。。
完整路径:“resources/mesh/nanosuit/glass_dif.png”
这是Ubuntu上的输出:

正在加载纹理“”。。。
完整路径:“资源/网格/纳米电路/”
确实,这些纹理在OSX和Windows10中被加载并应用到正确的模型上,但在Ubuntu中没有。其他一切似乎都正常工作,包括加载模型(由于着色器无法对纹理颜色进行采样,因此它仅显示为黑色)

我唯一能想到的是我安装的
libassimp dev
版本,它是4,而在OSX上是5。但我是一个持怀疑态度的v4,以前都无法加载纹理。这可能是我编译它的方式吗


我应该开始研究什么来解决这个问题?我在Ubuntu上使用gcc,在OSX上使用clang

好吧,为了进行尽职调查,我决定先排除
libassimp dev
版本,因为这是唯一不同的地方。我怀疑这就是问题所在,因为以前版本的
libassimp dev
在Linux上是如何工作的

嗯,我不知道,但这就是问题所在。我之所以避免这样做,是因为Ubuntu上的5版不适用于我的Linux版本:

在一位朋友的帮助下,我临时添加了“focal”软件包存储库,安装了新存储库中的相关软件包,然后删除了该存储库,这样Ubuntu就不会升级系统上的所有其他软件包,从而强制安装版本5

步骤:

1.)将以下配置附加到
/etc/apt/sources.list

# FIXME: remove me after installing libassimp5 and libassimp-dev
deb http://mirrors.kernel.org/ubuntu focal main universe
2.)更新软件包注册表并安装相关软件包(及其依赖项):

(我还遇到了一个问题,在运行此命令后,我必须运行建议的修复安装命令或类似命令)

3.)成功安装后,删除添加到
/etc/apt/sources.list的行

请确保您现在不要运行
sudo apt get upgrade
,因为它会尝试将您系统上的所有软件包升级到新版本的Ubuntu,这可能会产生不可预见的后果

4.)再次更新包注册表(以删除新存储库的跟踪)

重新编译我的项目后,工作-字符串正确显示材料文件路径和应用程序加载的纹理,并将它们正确地应用到模型

多米尼克·巴恩斯的这些步骤和指示:

sudo apt-get update
sudo apt-get install libassimp-dev libassimp5
sudo apt-get update