我有一个需要在

Windows,

Linux和VxWorks上构建的项目.该项目建立在Linux和Windows上,但是为VxWorks交叉编译.要处理跨多个平台的字节序,它使用ntoh.h. Linux机器是小端,但是ntohl不会交换我的程序.

我写了一个直接包含in.h的测试程序.交换得恰到好处.

我写了另一个包含ntoh.h的测试程序.交换得恰到好处.两个测试程序都链接到lib64 / libc.so.6.

但是,当我编译我的项目时,ntohl不会交换.我无法使用gdb“break ntohl”命令打破ntohl.在构建时,我看到LITTLE ENDIAN警告(见下文)并且没有看到“SHOULDNT BE HERE”错误.

请帮忙.我不明白为什么会出现这个问题.

下面是ntoh.h:

#ifndef __ntoh__

#define __ntoh__

#include "basic_types.h"

#ifdef WIN32

#include

#elif LINUX

#include

//This is here to determine what __BYTE_ORDER is set to in netinet/in.h.

// Not in original code

#if __BYTE_ORDER == __BIG_ENDIAN

#warning BIG ENDIAN BYTE ORDER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#endif

//This is here to determine what __BYTE_ORDER is set to in netinet/in.h.

// Not in original code

#if __BYTE_ORDER == __LITTLE_ENDIAN

#warning YAY LITTLE ENDIAN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#endif

#else

#error SHOULDNT BE HERE //added for debugging purposes

#define ntohl(x) (x)

#define ntohs(x) (x)

#define htonl(x) (x)

#define htons(x) (x)

#endif

#endif // __ntoh__

我的编译命令的一部分:

g++ -DDAU_PARSER -DNO_MT -DTEST_CLOCK -DLINUX -g -Irelease/include -Irelease/include/Record_Data/ -Irelease/include/Utility -o dauParser DAU_Support_Tools/src/dau_parser.cpp DAU_Support_Tools/src/dau_parser_write_data_to_file.cpp Utility/src/Messaging/Communications/Message.cpp Utility/src/time_type.cpp Utility/src/collectable.cpp Utility/src/clist.cpp Utility/src/clock.cpp Utility/src/test_clock.cpp Utility/src/mutex.cpp Utility/src/ntoh.cpp ...

错误由以下行生成:

int deadbeef = 0xDEADBEEF;

printf("TESTING DEADBEEF %x %x\n", deadbeef, ntohl(deadbeef) );

这两行的输出产生相同的输出.

测试DEADBEEF deadbeef deadbeef

linux编译ntohl加什么库,c – Linux:ntohl无法正常工作相关推荐

  1. 树莓派linux编译不了动态库,linux系统下的树莓派与Qt 5.12.3源码的交叉编译

    {写在前面:按照这个方法,基本可以成功在linux系统下交叉编译Qt5.12.3,其他版本的源码也编译} 我的环境:Linux Mint 19.1;树莓派 3;Qt源码5.12.3 当两个系统全部安装 ...

  2. php自己编译扩展,Linux编译PHP添加扩展库的方法

    在编译PHP的时候除了必要的目录指定,好多参数都没有加--等我在安装web程序的时候,才发现,很多参数是要加上的,但是我lnmp已经搭建好了,也不想重新编译,重新安装..于是就在网上找到了此文 一.添 ...

  3. linux 编译链接过程,编译程序 一:linux程序编译过程(一)-编译和链接

    大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...

  4. 反编译所有图片加载库,让OOM无所遁形!

    码个蛋(codeegg) 第 989 次推文 作者:ZhouZhengyi 链接:https://juejin.im/post/5ea1c46851882573a25f3ec3 1.背景 最近看滴滴开 ...

  5. linux 编译报错 not a directory,Linux常见英文报错中文翻译

    Linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permission ...

  6. linux sata驱动加载硬盘顺序,linux安装前必备知识

    一.学习linux必备条件 1.计算器概论与硬件相关知识 2.先从linux的安装与指令学起 3.linux操作系统的基础技能:包含了使用者,群组的概念,权限概念,程序的定义,龙其权限概念,由于不同的 ...

  7. linux编译ntohl加什么库,C ++中的64位ntohl()?

    我建议阅读以下内容:http : //commandcenter.blogspot.com/2012/04/byte-order-fallacy.html #include #include #inc ...

  8. linux编译bzip2,ARM-LINUX常用库移植------bzip2

    1.从bzip2的官网上(http://www.bzip.org/downloads.html)弄到源码包地址,下载到/opt wget http://www.bzip.org/1.0.6/bzip2 ...

  9. spdlog linux编译出错,c++日志库spdlog

    /*需要包含的头文件*/ #include "spdlog/spdlog.h" #include // EXIT_FAILURE #include #include void as ...

最新文章

  1. 每日一皮:学PHP的不容易...
  2. 7.3.1 阻塞IO(blocking IO)
  3. HDU Problem - 3763 CD(二分)
  4. 杭电1108java_按照这个步骤来刷题,迷茫的你两个月亦能成为王者
  5. 整理下开发中常用的第三方库
  6. Java多线程概念[同步容器,并发容器](二)
  7. LINUX自学-初识LINUX
  8. html批量生成断面,【干货】利用Excel在AutoCAD中批量绘制断面图的方法
  9. 唯美毕业论文答辩PPT模板
  10. 【导数术】12.极值点偏移与拐点偏移
  11. 你若运行,便是晴天!
  12. 【Arch】Android系统简介
  13. STM32F407--芯片解读
  14. MAC 10.14安装第三方软件的方法
  15. windows7旗舰版的好处
  16. c primer plus第五版勘误
  17. 大数据治理运营整体解决方案
  18. backlight子系统二
  19. 从零开始搭建Pytorch运行环境Linux
  20. iOS开发技巧:设置App icon图标及修改应用程序名

热门文章

  1. 47 Three.js使用THREE.ParametricGeometry生成平面图形、波浪图形、和克莱因瓶
  2. 6009.Cacti监控CMTS思科uBR7246路由器端口信噪比和误码率
  3. dcdc模块降额设计_专业电源模块生产厂家能动电子入驻拍明芯城,达成战略合作关系...
  4. 音频放大电路制作记录
  5. 炒股一定要懂股指期货
  6. 3D mark 05 测试
  7. 快速验证产品价值 -- MVP(最小可行产品)
  8. uboot启动的第二阶段分析
  9. LifeKeeper 双机软件 集群软件 双机热备份软件
  10. 分布式与集群的区别究竟是什么?