2015-09-16 4 views
1

Я использую Ubuntu, и я хочу использовать funopen(), но эта функция используется только в системе BSD. Так что я установить libbsdКак связать <bsd/stdio.h> в cmake для использования funopen()

sudo apt-get install libbsd-dev 

после этого, я могу включить и я вижу funopen() в этом файле заголовка. Но не может компилироваться. я стараюсь использовать это в CMakeLists.txt, но никакая польза:

find_package(bsd)

Я не думаю, что пары не bsd, как я могу это сделать?

[ОБНОВЛЕНО] сделать как @Alu предложение, по-прежнему не работает:

cmake_minimum_required(VERSION 3.3) 
project(myProject) 

set(SOURCE_FILES main.c) 
set(DIR_TO_LIB_HEADERS, /usr/include/bsd) 
set(DIR_TO_BSD_LIB_FILE, /usr/lib/x86_64-linux-gnu/libbsd.so) 
include_directories(${DIR_TO_LIB_HEADERS}) 
add_executable(myProject ${SOURCE_FILES}) 
target_link_libraries(myProject ${DIR_TO_BSD_LIB_FILE}) 

с ошибкой:

undefined reference to `funopen' 
+0

ошибка говорит, что ваш компилятор не находит определение метода. Таким образом, либо файл заголовка не определяет метод, либо ссылается на неправильный заголовок. Попробуйте включить 'bsd/stdio.h' – Alu

ответ

1

Я думаю CMake оленья кожа обеспечивает модуль для "найти" в Bsd LIB. Вы можете посмотреть here и попытаться понять, как работает механизм поиска cmake.

Но я предлагаю явно включать каталоги в ваш файл cmake. Я думаю, вы должны использовать что-то вроде

set(DIR_TO_LIB_HEADERS /usr/include/bsd) 
set(DIR_TO_BSD_LIB_FILE /usr/lib/i386-linux-gnu/libbsd.so) #or /usr/lib/x86_64-linux-gnu/libbsd.so on 64 bit OS 
include_directories(${DIR_TO_LIB_HEADERS}) 
target_link_libraries(${PROJECT_NAME} ${DIR_TO_BSD_LIB_FILE}) 

Here вы можете найти filelisting в Lib.

+0

извините, но я не могу найти /usr/lib/i386-linux-gnu/libbsd.so, мне нужно установить любой lib else, я установил libbsd-dev? – yelliver

+0

Попробуйте найти файлы в вашей системе. Возможно, у вас установлена ​​версия x64. – Alu

+0

Возможно, я нашел старую версию Lib bsd. Google, какие файлы будут установлены при установке libbsd – Alu

0

32 бит ОС:

set(DIR_TO_BSD_LIB_FILE /usr/lib/i386-linux-gnu/libbsd.so) 
target_link_libraries(${PROJECT_NAME} ${DIR_TO_BSD_LIB_FILE}) 

64 бит ОС:

set(DIR_TO_BSD_LIB_FILE /usr/lib/x86_64-linux-gnu/libbsd.so) 
target_link_libraries(${PROJECT_NAME} ${DIR_TO_BSD_LIB_FILE}) 

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

  • Нет связанных вопросов^_^