V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fei051466
V2EX  ›  C

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

  •  
  •   fei051466 · 2016-11-29 00:38:43 +08:00 · 2696 次点击
    这是一个创建于 2946 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    5 条回复    2016-11-30 07:56:23 +08:00
    alqaz
        1
    alqaz  
       2016-11-29 00:45:21 +08:00
    跨平台,可以用宏
    当然,小东西还可以自己写,如果太大的话,建议用开源跨平台库,自己维护太坑,而且很容易把业务代码和跨平台代码堆在一起,这是挖大坑。你这个应该是网络相关的,你可以试下 Libevent 或者 Boost asio ,都支持 win,linux,macos
    fei051466
        2
    fei051466  
    OP
       2016-11-29 00:56:31 +08:00 via iPhone
    @alqaz 非常感谢。不过回头才发现我的表述不完整。程序最终确定只需在 linux 上运行,所以无需跨平台。另外它需要运行在一些嵌入式系统中,所以不知后面说的 libevent 是否还合适。最后想再问个基础问题:是不是不能通过简单的移植使得 osx 也支持这个头文件?是不是底层调用不支持?
    raysonx
        3
    raysonx  
       2016-11-29 01:17:29 +08:00 via Android   ❤️ 1
    linux 目录下的头文件是 Linux 内核的头文件,不是标准库或者 POSIX 标准的头文件,当然不能在非 Linux 使用( osx 不是 Linux )
    fei051466
        4
    fei051466  
    OP
       2016-11-29 01:20:33 +08:00 via iPhone
    @raysonx 明白了!非常感谢
    q397064399
        5
    q397064399  
       2016-11-30 07:56:23 +08:00
    类 Unix 系统阵营之间的分化不是一天两天的事情了, posix 没出来之前,各个平台的移植性,几乎把 C/C++等程序员玩成精神分裂,如果是做嵌入式系统,最好是根据板子上的发行版,选择相应的 Linux 发行版即可
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   972 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:09 · PVG 03:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.