Linux SDL2应用程序在代码::块IDE之外没有透明度

Linux SDL2应用程序在代码::块IDE之外没有透明度,linux,Linux,我有一些奇怪的问题,我不明白它的起源 我在Windows上构建了一个SDL2应用程序,现在我正在尝试构建一个Linux版本。我在两个系统上都使用代码::块。在Linux上,我在Code::Blocks中设置了所有路径和库之后,它就会正常构建和运行 但当我将可执行文件和所有需要的文件移动到单独的目录中时,我突然有了奇怪的行为:所有图像现在都失去了透明度,看起来非常混乱 我只是不明白发生了什么。为什么IDE中的一切都能正常工作,而当您尝试像普通可执行文件一样运行它时,会发生这样奇怪的事情?好的,

我有一些奇怪的问题,我不明白它的起源

我在Windows上构建了一个SDL2应用程序,现在我正在尝试构建一个Linux版本。我在两个系统上都使用代码::块。在Linux上,我在Code::Blocks中设置了所有路径和库之后,它就会正常构建和运行

但当我将可执行文件和所有需要的文件移动到单独的目录中时,我突然有了奇怪的行为:所有图像现在都失去了透明度,看起来非常混乱


我只是不明白发生了什么。为什么IDE中的一切都能正常工作,而当您尝试像普通可执行文件一样运行它时,会发生这样奇怪的事情?

好的,事情是这样的:我发现,如果我从文件管理器运行我的可执行文件(即单击run.sh脚本),一切都很好。但是如果我尝试从命令行运行这个脚本,我会遇到透明度方面的问题

虽然我在SDL_SetTextureBlendMode调用中仍然会遇到关于“无效呈现器”的错误,但它们可能实际上并不相关,因为可能我忘记了检查每个其他SDL调用的错误,而该报告只是另一个调用的一些剩余内容

但是,有人知道为什么会这样吗

当我下载了最新版本的ADOM with graphics for Linux时,我得到了这种解决方案。我选择了Debian6.0.5版本作为最接近我的版本——我有7个。当我试图从命令行运行游戏时,我遇到了与我的应用程序相同的透明度问题。然后我决定尝试通过点击可执行文件从文件浏览器运行它——瞧!一切正常

WTF

仅为获取信息,我用于运行exe的run.sh脚本如下所示:

#!/bin/sh

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:lib
./Asteroids-x64

听起来像是一个与透明度相关的模块丢失了,因为它包含在项目文件夹外的相对路径中,但是如果没有更多信息,很难判断。这是什么意思?我认为您只需要提供一条到库的路径(SDL2、SDL2_图像等),它将处理其余部分。我将所有库放在lib/文件夹中,并编写了一个运行脚本,该脚本只执行“export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:lib”,然后运行应用程序。我通过调用SDL_SetTextureBlendMode(_texture,SDL_BLENDMODE_NONE)在IDE中重现了这种效果。但当我试图强制调用SDL_SetTextureBlendMode(_texture,SDL_BLENDMODE_BLEND)然后构建一个可执行文件并从IDE外部的单独目录运行时,我再次得到了同样奇怪的行为:-(可能是特定于平台的,因为在Windows上我没有这样的问题。