这个随笔会出现的相关问题:
1、配置unix网络环境(unp.h,config.h等等)
2、对于笔者出现的问题(找不到头文件的情况)
3、在c++文件中unp头文件出现的问题
1、配置unix网络环境(unp.h,config.h等等)
首先一开始要下载源码,网址是:http://www.unpbook.com/src.html
后面要正常解压文件。
在文件中有一个README的文本文件。
其中有源码作者写出的过程步骤。
首先执行命令:
./configure
cd lib
make
cd ../libgai
make
cd ../libfree
make
cd ../libroute //only if your system supports 4.4BSD style routing sockets
make //only if your system supports 4.4BSD style routing sockets
cd ../libxti //only if your system supports XTI
make //only if your system supports XTI
cd ../intro
make
其中libfree文件夹用make可能会出现error。
需要在文件inet_ntop.c中的第60行把size_t改成socklen_t。这样就能解决问题了。
在上面的代码中有两个是有需要才Makefile的,也就是说一般来说只需要Makefile四个就行了。
当执行完这些步骤之后unpv13e文件夹中会出现一个静态库:libunp.a
现在需要将两个头文件别分是:lib文件夹中的unp.h和unpv13e文件夹的config.h
复制到/usr/include 文件夹中。
然后将libunp.a静态库复制到 /usr/lib32 和 /user/lib64。
正常来说到了这里,你现在可以系统到处直接编译包含unp.h文件的源代码了。
2、对于笔者出现的问题(找不到头文件的情况)
但是笔者到了这个地步的时候出现了其他的问题
出现了这样的问题。
笔者在上面的复制步骤使用过也正常。但是就是不能正常编译。
最后我使用cmake解决了这个问题。
其中文件夹中的CMakeLists.txt文件(要小心不要忘记了最后的s)是下面这样写的:
CMAKE_MINIMUM_REQUIRED(VERSION 3.10) //cmake版本 PROJECT(demo) //输出文件的名称 AUX_SOURCE_DIRECTORY(./ DIR_SRSC) //把该文件夹里面的全部源码 打包成DIR_SRSC ADD_EXECUTABLE(demo ${DIR_SRSC}) //把资源包DIR_SRSC编译 include_directories(./headerfile) //引人要使用的头文件,该文件夹里面有unp.h和config.h。 TARGET_LINK_LIBRARIES(demo libunp.a) //引人要使用的静态库
在最后一个语法语句,使用绝对路径是可以的。(demo 绝对路径)。
但是不知道为什么笔者写的相对路径一直出错。最后发现直接写libunp.a是可以正常编译的。
(还有神奇的情况,写unp,unp.a,libunp在笔者的虚拟机ubuntu-20.04-desktop-amd64都是可以正常通过编译的)。
3、在c++文件中unp头文件出现的问题
第二个问题用cmake解决了,但是发现了unp文件如果用gcc编译是正常的。但是如果用到了cpp文件或者g++编译就会出现一堆错误。
由于笔者是一名c++萌新,打算用c++进行网络编程的练习,所以问过了一名好友。
发现了源码编译的时候,unp头文件套进一个extern "C" 就能解决问题。
这个问题是一个著名的问题:ABI问题。
其中一个容易错误的问题,要把unp.h头文件放在头文件序列里面最后。不然会出现error错误。
这样就能使用c++源文件来写了!
原文:https://www.cnblogs.com/Maxwalker-pub/p/13942436.html