нераспознанная опция командной строки ‘-framework’ - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь скомпилировать минималистский код opengl C в https://github.com/fogleman/HelloGL в моей системе Ubuntu 18.04, но я получаю следующую ошибку:

gcc -c -o build/matrix.o -std=c99 -O3 src/matrix.c    
gcc -o main build/shader.o build/main.o build/util.o build/matrix.o  -lglew -lglfw3 -framework Cocoa 
-framework OpenGL -framework IOKit -framework CoreVideo -lm    
gcc: error: Cocoa: No such file or directory    
gcc: error: OpenGL: No such file or directory    
gcc: error: IOKit: No such file or directory    
gcc: error: CoreVideo: No such file or directory    
gcc: error: unrecognized command line option ‘-framework’    
gcc: error: unrecognized command line option ‘-framework’    
gcc: error: unrecognized command line option ‘-framework’   
gcc: error: unrecognized command line option ‘-framework’    
Makefile:24: recipe for target 'main' failed

Я понимаю, что причиной этого является следующая строка в MakeFIle, которая сделана для OSX (предположительно):

LIBS = -lglew -lglfw3 -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo

Есть ли способ адаптировать эту линию, чтобы она работала в GNU / Linux системе? Или это должно быть связано с платформой Какао?

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Я скачал этот пример проекта и сам возился с ним. Похоже, что он не содержит никакого специфического для OSX кода; просто его Makefile был написан только для OSX.

Сначала убедитесь, что у вас установлены пакеты libglfw3-dev и libglew-dev. Установка их из диспетчера пакетов Ubuntu должна автоматически включить все остальные необходимые библиотеки.

Затем измените строку LIBS файла Makefile на

LIBS = -lGLEW -lglfw -lGL -lm

Без видимой причины библиотека с именем libglew в OSX называется libGLEW в Linux (стиль Debian), а библиотека с именем libglfw3 в OSX называется libglfw в Linux. -lGL является Linux-эквивалентом -framework OpenGL, а -lm содержит математическую библиотеку (необходима для одного вызова sqrt), которая отделена от базовой библиотеки C в Linux, но не в OSX, если я помню правильно.

Вам также может понадобиться отрегулировать линию FLAGS. Этот параметр работал для меня:

FLAGS = -g -O2 -std=gnu99 -Wall -Wextra -Wpedantic

Важное изменение здесь -std=gnu99 вместо -std=c99. Более строгий режим C99 является проблематичным; он отключает расширения, которые люди не понимают, являются расширениями, например math.h, определяющими константу M_PI, которую хочет эта программа. (У этого также есть неприятная привычка ломать связанные с сетью заголовки системы, по причинам, которые слишком сложны, чтобы проникнуть сюда. К счастью, эта программа не использует сеть.)

Я также добавил -Wall -Wextra -Wpedantic, добавил -g и изменил -O3 на -O2. Это все, что я обычно делаю с каждой программой на С, с которой я работаю. Первые два могут выявить проблемы, и они почти никогда не болят; в этом случае они не имели никакой видимой разницы. Третье потому, что -O3 часто делает вашу программу на медленнее , чем -O2 будет .

0 голосов
/ 15 сентября 2018

Параметр -framework специфичен для платформ Apple, как и для самих платформ Cocoa, IOKit и CoreVideo.Команды и опции сборки, которые вы используете, предназначены для macOS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...