2014-12-04 3 views
1

С каждой новой библиотекой, которую я хочу использовать, я заметил, что есть определенный флаг или набор флагов, я должен добавить к компиляции, чтобы он действительно связывал библиотеку.C++ где указаны флаги для связывания библиотек?

Например, с GL GLEW и GLUT я использую «-lglut -lGLU -lGL».

Проблема заключается в единственном способе поиска этих флагов, которые мне нужны, - это бесконечно искать в Google для них. Есть ли «стандартное» место для поиска этих флагов для любой библиотеки? Прикреплены ли они к вершинам заголовков или что-то еще? Надеюсь, это просто что-то очевидное.

ответ

3

Предполагаю, что вы спрашиваете о компиляторе GCC/G ++.

Флаг -l<libName>, где <libName> - это название библиотеки, в которую вы хотите установить ссылку. Например, -lGL ссылки на библиотеку GL.

Причина, по которой некоторые библиотеки требуют нескольких флагов в определенном порядке, просто зависит от того, как они зависят друг от друга (библиотеки, от которых зависит ваша библиотека, также могут зависеть от некоторых других) и т. Д.). Документация библиотеки должна решить проблему в большинстве случаев.

+0

Да, GCC на Fedora 20. Я забыл, как разные компиляторы и платформы могут быть с C++. Исходя из действительно тяжелого фона java/opengl. Спасибо за подсказку, хотя человек. –

+0

И просто следить. После нескольких попыток я обнаружил, что флагом библиотеки cURL является -lcurl. Давайте просто надеемся, что остальные - это просто ха-ха. Еще раз спасибо. –

+0

Они, к счастью, обычно. Добро пожаловать. – Kelm

2

Как правило, вы разрабатываете интуицию для обнаружения этих вещей на платформах, которые вы разрабатываете. Он сосать.

Например, в моей системе разработки Debian я бы начал с проверки pkg-config для библиотеки, которую я хочу.

pkg-config --list-all | less -i 

Похоже, что есть пакет с именем gl. Таким образом, вы можете получить флаги компоновщика с помощью pkg-config:

pkg-config --libs gl 
pkg-config --cflags gl 

Тогда вы можете положить, что в ваш Makefile:

gl_cflags := $(shell pkg-config --cflags gl) 
gl_libs := $(shell pkg-config --libs gl) 

override CFLAGS += $(gl_cflags) 
override LIBS += $(gl_libs) 

my_app: my_app.o 
     $(CC) $(LDFLAGS) -o [email protected] $^ (LIBS) 

Это не работает для всех библиотек, только те, с .pc установленных файлами. Например, он не будет работать для LibJPEG. В этих случаях вы либо будете помнить флаги (-ljpeg), либо использовать сценарий конфигурации Autoconf/CMake/etc для обнаружения флагов во время настройки.

И ничто из этого не будет работать, если у вас не установлены версии для разработки ваших библиотек.

sudo apt-get install libgl1-mesa-dev 

P.S. GLU немного устарел.

+0

Я просто получаю зависание работы C++. У меня много опыта работы с OpenGL в Java, и я, скорее всего, буду использовать вызовы GL11 GL20 и GL33, когда я действительно привык к этому.Я также слышал, что SDL очень хорош для этого типа работы на C++, поэтому я могу дать вам понять. –

Смежные вопросы