我正在使用Ubuntu,并且想使用funopen(),但是此功能仅在BSD系统中。所以我安装了libbsd

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'

最佳答案

我认为cmake不提供用于“查找” bsd库的模块。
您可以查看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,您可以找到lib的文件列表。

08-16 21:11