Как устранить ошибки компоновщика, используя DSFML2 с D2 на Ubuntu? - PullRequest
4 голосов
/ 17 апреля 2011

Я использую 64-разрядную версию Ubuntu Linux с DMDv2.052, пытаюсь заставить приложение работать с DSFML2, но продолжаю сталкиваться с ошибками компоновщика.

Я создал библиотеки SFML и CSFML с использованием общих библиотек +выпустить сборки и установить их, затем создать привязки DSFML следующим образом:


me@lappy486:~/devl/sfml2/bindings/d/import/dsfml/system$ dmd -m64 -lib *.d -of../../../lib/libdsfml-system.a 
me@lappy486:~/devl/sfml2/bindings/d/import/dsfml/system$ cd ../window 
me@lappy486:~/devl/sfml2/bindings/d/import/dsfml/window$ dmd -m64 -lib *.d -of../../../lib/libdsfml-window.a 
me@lappy486:~/devl/sfml2/bindings/d/import/dsfml/window$ cd ../graphics 
me@lappy486:~/devl/sfml2/bindings/d/import/dsfml/graphics$ dmd -m64 -lib *.d -of../../../lib/libdsfml-graphics.a 
me@lappy486:~/devl/sfml2/bindings/d/import/dsfml/graphics$ cd ../audio 
me@lappy486:~/devl/sfml2/bindings/d/import/dsfml/audio$ dmd -m64 -lib *.d -of../../../lib/libdsfml-audio.a 

При попытке создать проект для их использования я получаю следующие ошибки:


me@lappy486:~/devl/d/Gossamer$ dmd -m64 *.d game/*.d graphics/*.d -L"-L/home/me/devl/sfml2/bindings/d/lib -ldsfml-system -ldsfml-window -ldsfml-graphics -ldsfml-audio" 
collision.o:(.data+0xab0): undefined reference to `_D5dsfml8graphics5color12__ModuleInfoZ' 
collision.o:(.data+0xb18): undefined reference to `_D5dsfml6system9exception16LoadingException7__ClassZ' 
collision.o:(.data+0xbe0): undefined reference to `_D5dsfml8graphics3all12__ModuleInfoZ' 
collision.o:(.data+0xd38): undefined reference to `_D5dsfml8graphics3all12__ModuleInfoZ' 
collision.o:(.data+0xd40): undefined reference to `_D5dsfml6window3all12__ModuleInfoZ' 
collision.o:(.data+0xdd8): undefined reference to `_D5dsfml6system9exception16LoadingException7__ClassZ' 
collision.o:(.data+0xf40): undefined reference to `_D5dsfml8graphics3all12__ModuleInfoZ' 
collision.o: In function `_D8graphics5image5Image6__ctorMFAyaZC8graphics5image5Image': 
graphics/text.d:(.text._D8graphics5image5Image6__ctorMFAyaZC8graphics5image5Image+0x17): undefined reference to `_D5dsfml8graphics6sprite6Sprite7__ClassZ' 
graphics/text.d:(.text._D8graphics5image5Image6__ctorMFAyaZC8graphics5image5Image+0x2a): undefined reference to `_D5dsfml8graphics5image5Image7__ClassZ' 
graphics/text.d:(.text._D8graphics5image5Image6__ctorMFAyaZC8graphics5image5Image+0x67): undefined reference to `_D5dsfml8graphics5image5Image6__ctorMFAyaZC5dsfml8graphics5image5Image' 
graphics/text.d:(.text._D8graphics5image5Image6__ctorMFAyaZC8graphics5image5Image+0xa3): undefined reference to `_D5dsfml8graphics5color4RGBA5WHITEyS5dsfml8graphics5color4RGBA' 
graphics/text.d:(.text._D8graphics5image5Image6__ctorMFAyaZC8graphics5image5Image+0xac): undefined reference to `_D5dsfml8graphics6sprite6Sprite6__ctorMFC5dsfml8graphics5image5ImagefffffS5dsfml8graphics5color4RGBAZC5dsfml8graphics6sprite6Sprite' 
collision.o: In function `_D8graphics6screen6Screen5clearMFZv': 
graphics/text.d:(.text._D8graphics6screen6Screen5clearMFZv+0xa): undefined reference to `_D5dsfml8graphics5color4RGBA5BLACKyS5dsfml8graphics5color4RGBA' 
collision.o: In function `_D8graphics6screen6Screen6__ctorMFAyakkZC8graphics6screen6Screen': 
graphics/text.d:(.text._D8graphics6screen6Screen6__ctorMFAyakkZC8graphics6screen6Screen+0x24): undefined reference to `_D5dsfml8graphics12renderwindow12RenderWindow7__ClassZ' 
graphics/text.d:(.text._D8graphics6screen6Screen6__ctorMFAyakkZC8graphics6screen6Screen+0x73): undefined reference to `_D5dsfml8graphics12renderwindow12RenderWindow6__ctorMFS5dsfml6window9videomode9VideoModeAyaE5dsfml6window6window5StyleS5dsfml6window6window15ContextSettingsZC5dsfml8graphics12renderwindow12RenderWindow'
collision.o: In function `_D8graphics4text4Font6__ctorMFAyaZC8graphics4text4Font': 
graphics/text.d:(.text._D8graphics4text4Font6__ctorMFAyaZC8graphics4text4Font+0x17): undefined reference to `_D5dsfml8graphics4font4Font7__ClassZ' 
graphics/text.d:(.text._D8graphics4text4Font6__ctorMFAyaZC8graphics4text4Font+0x54): undefined reference to `_D5dsfml8graphics4font4Font6__ctorMFAyaZC5dsfml8graphics4font4Font' 
collision.o: In function `_D8graphics4text4Text6__ctorMFC8graphics4text4FontAyakS5dsfml8graphics5color4RGBAZC8graphics4text4Text': 
graphics/text.d:(.text._D8graphics4text4Text6__ctorMFC8graphics4text4FontAyakS5dsfml8graphics5color4RGBAZC8graphics4text4Text+0x19): undefined reference to `_D5dsfml8graphics4text4Text7__ClassZ' 
graphics/text.d:(.text._D8graphics4text4Text6__ctorMFC8graphics4text4FontAyakS5dsfml8graphics5color4RGBAZC8graphics4text4Text+0x3b): undefined reference to `_D5dsfml8graphics4text4Text6__ctorMFAyaC5dsfml8graphics4font4FontkZC5dsfml8graphics4text4Text' 
collect2: ld returned 1 exit status 
--- errorlevel 1 

Можеткто-нибудь помочь с этим?Я не смог заставить его работать.

1 Ответ

1 голос
/ 17 апреля 2011

Я не знаю, что не так, но я бы начал с удаления любых сложностей, которые вы можете:

  1. Использование .so в D ... "проблематично", если возможно, использоватьстатическое связывание.
  2. Попробуйте построить его в 32-битном режиме (64-разрядная версия по-прежнему альфа-версия, насколько я слышал)
  3. Попробуйте создать приложение hello world, используя ту же настройку lib.
  4. Не делайте ссылку из DMD, делайте это явно через ld.(Скомпилируйте что-нибудь, что уже работает в подробном режиме, чтобы получить начальную точку для командной строки, которая вам понадобится.)
...