我正在尝试用AdaSDL2组建一个项目,但我不知道我在做什么(不怕承认)。在SO和其他地方有很多回答的问题可以解决类似的问题,但不能解决我的问题。
基本上,我无法得到链接的东西。这是我第一次尝试链接到绑定。我正在使用GPS 2014.我尝试过在网上看到的不同解决方案时遇到了很多错误。
这是我的.gpr:
project Test is
for Source_Dirs use ("./**", "..\AdaSDL2-master");
for Source_Files use ("engine.adb", "engine.ads", "lists.adb", "lists.ads", "sdl-image.adb", "sdl-image.ads", "sdl-mixer.adb", "sdl-mixer.ads", "sdl-ttf.adb", "sdl-ttf.ads", "sdl.adb", "sdl.ads", "window.adb");
for Main use ("window.adb");
end Test;
这是我的源文件window.adb:
with sdl; use sdl;
with Ada.Text_IO;
with Interfaces.C; use Interfaces.C;
procedure Window is
begin
if (SDL_Init((SDL_INIT_VIDEO)) < 0) then
Ada.Text_IO.Put_Line("Could not initialize video!");
end if;
end Window;
还有其他源文件,但它们现在甚至都没有使用,因为我只是想让上面的文件正常链接到正确的链接。
当它试图链接时,它给了我几个未定义的引用错误:
*mypath*\sdl.o:sdl.adb:(.text+0x21b3): undefined reference to `SDL_RWFromFile'
*mypath*\sdl.o:sdl.adb:(.text+0x21c3): undefined reference to `SDL_LoadBMP_RW'
*mypath*\sdl.o:sdl.adb:(.text+0x225d): undefined reference to `SDL_RWFromFile'
*mypath*\sdl.o:sdl.adb:(.text+0x2274): undefined reference to `SDL_SaveBMP_RW'
*mypath*\sdl.o:sdl.adb:(.text+0x24cf): undefined reference to `SDL_EventState'
*mypath*\sdl.o:sdl.adb:(.text+0x264b): undefined reference to `SDL_RWFromFile'
*mypath*\sdl.o:sdl.adb:(.text+0x2670): undefined reference to `SDL_LoadWAV_RW'
c:/gnat/2014/bin/../libexec/gcc/i686-pc-mingw32/4.7.4/ld.exe: *mypath*\sdl.o: bad reloc address 0x1140 in section `.rdata'
c:/gnat/2014/bin/../libexec/gcc/i686-pc-mingw32/4.7.4/ld.exe: final link failed: Invalid operation
我知道这是一个愚蠢的问题,但我没有运气通过Google或SO搜索找到答案。我确定这与我的项目设置(gpr)或我试图运行gnatmake的方式有关,但我无处可去。我不知道我是否需要以某种方式链接到sdl2.dll本身,但我尝试了一些不同的方式,它给我的最常见的错误是它无法识别文件格式。
有人能帮忙解释一下吗?感谢。
答案 0 :(得分:0)
我还没有使用过那个绑定,但是这些错误让我想起了当我制作一个OpenGL绑定,并再次尝试在postgres-sql绑定中进行链接时 - 你是否拥有了你自己的lib?重新链接到适当的目录? (sdl2.dll或它可能正在寻找一个静态库......)
另外,请确保告诉链接器&#34; -lsdl2&#34; (我想;我不记得你是否需要后缀......最好重新阅读链接器的文档。)
我认为在irc.freenode上问#Ada将是你最好的选择。我知道至少有一个人积极开发SDL-2绑定。
答案 1 :(得分:0)
好的问题是我在需要x86 dll时尝试使用x64 dll。我只需要返回到SDL下载页面并用正确的dll替换它。菜鸟错了。我希望这可以帮助别人。