mac 上开发 C 程序关于头文件的问题

2016-11-29 00:38:43 +08:00
 fei051466

最近上手修改一个 C 程序,无奈基础不扎实发生了很郁闷的问题,特来请教大大们。
开发环境是 mac ,但是程序中的两个头文件无法找到,如果是在 Ubuntu 下则没问题。

#include <linux/ip.h>
#include <linux/tcp.h>

查了一下发现有类似的问题,解决方法是使用其他头文件替代,例如:netinet/ip.h替代linux/ip.h
那么问题来了:

  1. 修改后能否在其他系统正常运行?
  2. 即使运行没问题,考虑到以后交给其他人继续修改势必会继续带来不便,是否有优雅的解决方法?

目前是在虚拟机 Ubuntu 上开发,其实最终目的还是想回到 osx 上写,多少觉得虚拟机不方便。

2499 次点击
所在节点    C
5 条回复
alqaz
2016-11-29 00:45:21 +08:00
跨平台,可以用宏
当然,小东西还可以自己写,如果太大的话,建议用开源跨平台库,自己维护太坑,而且很容易把业务代码和跨平台代码堆在一起,这是挖大坑。你这个应该是网络相关的,你可以试下 Libevent 或者 Boost asio ,都支持 win,linux,macos
fei051466
2016-11-29 00:56:31 +08:00
@alqaz 非常感谢。不过回头才发现我的表述不完整。程序最终确定只需在 linux 上运行,所以无需跨平台。另外它需要运行在一些嵌入式系统中,所以不知后面说的 libevent 是否还合适。最后想再问个基础问题:是不是不能通过简单的移植使得 osx 也支持这个头文件?是不是底层调用不支持?
raysonx
2016-11-29 01:17:29 +08:00
linux 目录下的头文件是 Linux 内核的头文件,不是标准库或者 POSIX 标准的头文件,当然不能在非 Linux 使用( osx 不是 Linux )
fei051466
2016-11-29 01:20:33 +08:00
@raysonx 明白了!非常感谢
q397064399
2016-11-30 07:56:23 +08:00
类 Unix 系统阵营之间的分化不是一天两天的事情了, posix 没出来之前,各个平台的移植性,几乎把 C/C++等程序员玩成精神分裂,如果是做嵌入式系统,最好是根据板子上的发行版,选择相应的 Linux 发行版即可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/323989

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX