Связывание статических библиотек с помощью c ++ / cmake - PullRequest
0 голосов
/ 17 августа 2011

Я пытаюсь связать библиотеки в моей программе, используя firebreath Framework.

Поэтому я добавляю этот код в projectDef.cmake.

include_directories(/usr/include/giblib)
include_directories(/usr/include/X11)

add_library(giblib_ptm STATIC IMPORTED) 
set_property(TARGET giblib_ptm PROPERTY IMPORTED_LOCATION /usr/lib/libgiblib.a)

add_library(X11_ptm STATIC IMPORTED) 
set_property(TARGET X11_ptm PROPERTY IMPORTED_LOCATION /usr/lib/i386-linux-gnu/libX11.a)

add_library(Imlib_ptm STATIC IMPORTED) 
set_property(TARGET Imlib_ptm PROPERTY IMPORTED_LOCATION /usr/lib/libImlib2.a)

target_link_libraries(Printmade2 giblib_ptm X11_ptm Imlib_ptm)

Почему я добавляю 'include_directories' Я включаю заголовочный файл в свой файл .cpp.

#include <giblib.h>
#include <Xlib.h>

После выполнения make появляется это сообщение об ошибке.

/usr/lib/i386-linux-gnu/libX11.a(OpenDis.o): In function `OutOfMemory':
(.text+0x459): undefined reference to `xcb_disconnect'
/usr/lib/i386-linux-gnu/libX11.a(OpenDis.o): In function `XOpenDisplay':
(.text+0x8f5): undefined reference to `xcb_get_setup'
/usr/lib/i386-linux-gnu/libX11.a(OpenDis.o): In function `XOpenDisplay':
(.text+0xedb): undefined reference to `xcb_get_maximum_request_length'
/usr/lib/i386-linux-gnu/libX11.a(xcb_disp.o): In function `_XConnectXCB':
(.text+0x176): undefined reference to `xcb_parse_display'
/usr/lib/i386-linux-gnu/libX11.a(xcb_disp.o): In function `_XConnectXCB':
(.text+0x1d7): undefined reference to `xcb_connect_to_display_with_auth_info'
...
/usr/lib/i386-linux-gnu/libX11.a(xcb_io.o): In function `poll_for_event':
(.text+0x30e): undefined reference to `xcb_poll_for_event'
/usr/lib/i386-linux-gnu/libX11.a(xcb_io.o): In function `poll_for_response':
(.text+0x6b4): undefined reference to `xcb_poll_for_reply'
/usr/lib/i386-linux-gnu/libX11.a(xcb_io.o): In function `_XSend':
(.text+0x85f): undefined reference to `xcb_writev'
/usr/lib/i386-linux-gnu/libX11.a(xcb_io.o): In function `_XReadEvents':
(.text+0xa1f): undefined reference to `xcb_connection_has_error'
....

Я думаю, что эта ошибкавызывается 'add_library' и 'set_property' ,

, но я не могу понять, почему.

Что я должен сделать для связывания статическогобиблиотеки в моей программе?

1 Ответ

2 голосов
/ 17 августа 2011

Я думаю, вы неправильно понимаете создание статической библиотеки. Статическая библиотека - это коллекция объектных файлов, в ней нет кода инициализации / деинсталляции для добавления дополнительных библиотек, таких как разделяемая библиотека или исполняемая банка.

Если вы создаете libraryA , которая использует код из libraryB и libraryC , когда вы создаете applicationX , которая использует libraryA Вы должны вручную извлечь обе библиотеки libraryB и libraryC . Для разделяемых библиотек это не обязательно.

Если вы исследуете pkg-config, вы увидите свойство Libs.private, которое указывает эти дополнительные частные или внутренние библиотеки, которые требуются для статической ссылки.

...