2015-09-16 1 views
1

J'utilise Ubuntu, et je veux utiliser funopen(), mais cette fonction est dans le système BSD seulement. Alors j'installe libbsdcomment lier <bsd/stdio.h> dans cmake pour utiliser funopen()

sudo apt-get install libbsd-dev 

après cela, je peux comprendre et je vois le funopen() dans ce fichier d'en-tête. Mais ne peut pas compiler. J'essaie utiliser dans CMakeLists.txt, mais aucune utilisation:

find_package(bsd)

Je pense que le param n'est pas bsd, comment puis-je le faire?

[MISE À JOUR] faire comme suggestion @Alu, toujours pas:

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}) 

avec l'erreur:

undefined reference to `funopen' 
+0

L'erreur indique que votre compilateur ne trouve pas la définition de la méthode. Donc, soit le fichier d'en-tête ne définit pas la méthode, soit le mauvais en-tête sera référencé. Essayez d'inclure 'bsd/stdio.h' – Alu

Répondre

1

Je pense que CMake ne marche pas fournir un module pour "trouver" le bsd lib. Vous pouvez rechercher here et essayer de comprendre le fonctionnement du mécanisme de recherche cmake.

Mais je suggère d'inclure explicitement les répertoires dans votre fichier cmake. Je pense que vous devez utiliser quelque chose comme

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 vous pouvez trouver le filelisting du lib.

+0

désolé mais je ne peux pas trouver /usr/lib/i386-linux-gnu/libbsd.so, ai-je besoin d'installer une autre lib, j'ai installé libbsd-dev? – yelliver

+0

Essayez de trouver les fichiers sur votre système. Peut-être que vous avez la version x64 installée. – Alu

+0

Peut-être que j'ai trouvé une ancienne version de Lib bsd. Google quels fichiers seront installés lors de l'installation de libbsd – Alu

0

32 bits OS:

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

64 bits OS:

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