linux - 如何在 cmake 中链接 <bsd/stdio.h> 以使用 funopen()

标签 linux cmake stdio bsd

我使用的是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 find 机制的工作原理。

但我建议在您的 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您可以找到该库的文件列表。

关于linux - 如何在 cmake 中链接 <bsd/stdio.h> 以使用 funopen(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32613568/

相关文章:

c - snprintf 函数未声明?

Cygwin:由于 stdio putc + 行缓冲而丢失流数据

c++ - Linux 上的 FreeImage 返回 -1 格式

cmake - 如何使用变量并避免违反 CMP0054 策略?

c++ - 共享对象中的符号名称与 .cpp 文件中的函数不同

python - 在Caffe2上启用多线程

c - 为子进程重定向 IO

Linux 恢复删除的目录

linux - .NET 4.6 - Linux 上的 monodevelop

linux - MobaXterm 卡在 "Please wait while opening file..."对话框上