Как устранить ошибки компоновщика, используя DSFML2 с D2 в Ubuntu?

#gcc #ubuntu #d #sfml #dmd

#gcc #ubuntu #d #sfml #dmd

Вопрос:

Я запускаю 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. что, черт возьми, такое DSFML2?

Ответ №1:

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

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

Комментарии:

1. Я думаю, вы имеете в виду ld , не ln . ln предназначен для создания ссылок на файловую систему.