ld: рамки не найдены sfml - PullRequest
       38

ld: рамки не найдены sfml

0 голосов
/ 02 ноября 2018

Я скопировал содержимое Frameworks из SFML в ~ / Library / Frameworks и попытался запустить первый учебный пример в SFML. Я использовал это в g ++:

g++ -o sfml-test.cpp -framework SFML -lsfml-window

и получите эту ошибку:

ld: framework not found SFML

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 ноября 2018

Прежде всего, в учебнике указываются /Library/Frameworks, , а не ~/Library/Frameworks. ~ указывает на домашний каталог пользователя (/Users/name/), тогда как / указывает на самую низкую точку в файловой системе.

Также , несмотря на документацию , /Library/Frameworks не является стандартным каталогом фреймворка, поэтому вы должны установить его в путях поиска. Вы можете увидеть стандартные каталоги фреймворка, запустив gcc -Xlinker -v:

@(#)PROGRAM:ld  PROJECT:ld64-409.12
BUILD 17:47:51 Sep 25 2018
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em arm64e arm64_32
Library search paths:
    /usr/local/lib
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib
Framework search paths:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Обратите внимание на раздел Framework search paths, он не включает /Library/Frameworks.

Чтобы добавить /Library/Frameworks к пути поиска, скомпилируйте с помощью -F/Library/Frameworks и укажите ссылку с -F/Library/Frameworks -framework SFML -framework sfml-x, где x равен system, window, graphics, audio или network.

Кроме того, опция -o указывает имя выходного файла. Ваша команда не будет принимать входные файлы и выводить исполняемый файл sfml-test.cpp, поэтому используйте -o sfml-test sfml-test.cpp, чтобы взять sfml-test.cpp в качестве ввода, и выведите sfml-test.

Ваша команда будет:

g++ -o sfml-test sfml-test.cpp -F/Library/Frameworks -framework SFML -framework sfml-window

...