CentOS 7 下安装libbsd-dev 编译apue3时出错处理

文章详细介绍了在CentOS环境下解决make编译错误的方法,通过安装libbsd-dev包来解决未定义引用的问题,最终使得在CentOS上编译UNIX环境高级编程时make编译成功。

今天用了一天在电脑上装了centos 7 编译UNIX环境高级编程时make出错 错误代码如下

gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  barrier.c -o barrier  -L../lib -lapue -pthread -lrt -lbsd
/tmp/cc80TnQA.o:在函数‘thr_fn’中:
barrier.c:(.text+0x80):对‘heapsort’未定义的引用
collect2: 错误:ld 返回 1
make[1]: *** [barrier] 错误 1

查了下是libbsd-dev 没有装,ubuntu下面是直接

sudo apt-get  install libbsd-dev

但是CentOS下面 yum的话是找不到的。解决方法就是下载rpm包安装libbsd-dev,具体步骤如下(笔者是64位的):

wget http://elrepo.reloumirrors.net/testing/el6/x86_64/RPMS/libbsd-devel-0.2.0-4.el6.elrepo.x86_64.rpm

wget http://elrepo.reloumirrors.net/testing/el6/x86_64/RPMS/libbsd-devel-0.2.0-4.el6.elrepo.x86_64.rpm


rpm -ivh libbsd-0.2.0-4.el6.elrepo.x86_64.rpm

rpm -ivh libbsd-devel-0.2.0-4.el6.elrepo.x86_64.rpm

如果是32位的,可以去wget相应的rpm包。


在去make apue3时编译成功。

<think>好的,用户现在在CentOS上需要安装libarrow-dev和libparquet-dev来解决ArrowC++库编译的报错,特别是找不到arrow/api.h的问题。首先,我需要回忆一下之前在Ubuntu和macOS上的安装方法,但CentOS的包管理不同,可能需要不同的步骤。用户之前的问题提到了在Ubuntu下用apt-get安装,但CentOS通常使用yum或者dnf,不过默认仓库可能没有这些包。首先,我应该检查ApacheArrow的官方文档是否有针对CentOS安装说明。通常,对于RHEL/CentOS系统,可能需要启用EPEL仓库或者从源码编译。另外,用户提到的是libarrow-dev和libparquet-dev,这在CentOS对应的可能是不同的包名,比如可能是arrow-devel和parquet-devel。接下来,用户遇到的是编译找不到头文件的问题,这通常是因为开发包没有正确安装,或者头文件路径不在编译器的搜索路径中。所以需要确保安装的是开发包,而不仅仅是运行库。此外,可能需要设置环境变量或者调整CMake的配置来正确找到头文件和库文件。 考虑到用户可能对CentOS的包管理不太熟悉,我需要提供详细的步骤,包括添加必要的仓库,使用yum或dnf安装正确的开发包。如果官方仓库没有这些包,可能需要从源码编译,这候需要指导用户如何下载源码,安装依赖,编译安装。同编译选项需要注意,比如开启Parquet支持。 另外,用户之前的问题中引用了关于Qt构建套件和环境变量设置的内容,虽然当前问题不直接相关,但可能需要注意环境变量是否正确设置,比如PKG_CONFIG_PATH或者LD_LIBRARY_PATH,以确保编译器和链接器能够找到安装的库。还需要验证安装后的头文件是否存在,比如通过find命令查找arrow/api.h的位置,并确保CMake或编译命令中包含该路径。如果用户自定义安装路径,可能需要手动指定头文件和库路径。最后,生成相关问题,比如如何验证安装是否成功,解决链接错误,Windows下的编译等,帮助用户进一步解决可能遇到的问题。</think>### CentOS安装libarrow-dev和libparquet-dev解决方案 #### 1. 通过EPEL仓库安装(推荐) CentOS 7/8默认仓库不包含Arrow开发包,需先启用EPEL仓库: ```bash # CentOS 7 sudo yum install epel-release # CentOS 8 sudo dnf install epel-release # 安装开发包 sudo yum install arrow-devel parquet-devel # CentOS 7 sudo dnf install arrow-devel parquet-devel # CentOS 8 ``` #### 2. 源码编译安装(自定义版本) 若需要特定版本或EPEL仓库无对应包,需源码编译: ```bash # 安装依赖 sudo yum install -y cmake git gcc-c++ make openssl-devel bison flex # 下载源码 git clone https://github.com/apache/arrow.git cd arrow/cpp mkdir build && cd build # 配置编译选项 cmake -DARROW_PARQUET=ON \ -DARROW_BUILD_STATIC=OFF \ -DCMAKE_INSTALL_PREFIX=/usr/local/arrow .. # 编译安装 make -j$(nproc) sudo make install # 设置库路径 echo "/usr/local/arrow/lib" | sudo tee /etc/ld.so.conf.d/arrow.conf sudo ldconfig ``` #### 3. 验证头文件位置 安装完成后检查头文件路径: ```bash # 标准安装路径检查 find /usr -name arrow/api.h 2>/dev/null # 源码编译路径检查 find /usr/local/arrow -name arrow/api.h 2>/dev/null ``` #### 4. CMake项目配置示例 在CMakeLists.txt中添加以下配置[^1]: ```cmake find_package(Arrow REQUIRED) include_directories(${ARROW_INCLUDE_DIR}) target_link_libraries(your_project ${ARROW_SHARED_LIB}) ``` #### 5. 环境变量设置(非标准路径) 若自定义安装路径,需在编译指定: ```bash export C_INCLUDE_PATH=/custom/path/include:$C_INCLUDE_PATH export LIBRARY_PATH=/custom/path/lib:$LIBRARY_PATH ``` #### 6. 常见问题处理 - **错误现象**: ```text fatal error: arrow/api.h: No such file or directory ``` - **解决方案**: 1. 确认已安装`arrow-devel`包 2. 检查`/usr/include/arrow`目录是否存在 3. 在CMake中显式指定路径: ```cmake include_directories(/usr/include/arrow) ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值