gpt4 book ai didi

c++ - IN_ADDR 结构在 android 中奇怪地定义

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:38 24 4
gpt4 key购买 nike

我正在尝试在 android 上编译网络代码并看到编译错误。我正在使用的结构是 ip_mreq_source,它应该像这样在 header 中定义:

struct ip_mreq_source {
struct in_addr imr_multiaddr;
struct in_addr imr_sourceaddr;
struct in_addr imr_interface;
};

in_addr 应定义为:

typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};

我从基于 Android 的编译器的 g++ (GCC 4.4.3) 中出来的详细错误:

    arm-linux-androideabi-g++ -MMD -MP -MF groupsock/GroupsockHelper.o.d.org -fpic
-ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__
-D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float
-fno-exceptions -fno-rtti -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-
limit=64 -Igroupsock/include -Igroupsock/../UsageEnvironment/include -Iandroid-
ndk-r5b/sources/cxx-stl/system/include -Igroupsock -DANDROID -Wa,--noexecstack
-DANDROID_NDK -Wall -fexceptions -O2 -DNDEBUG -g -Iandroid-8/arch-arm/usr/include -c
groupsock/GroupsockHelper.cpp -o groupsock/GroupsockHelper.o && rm -f
groupsock/GroupsockHelper.o.d && mv groupsock/GroupsockHelper.o.d.org
groupsock/GroupsockHelper.o.d
groupsock/GroupsockHelper.cpp: In function 'Boolean socketJoinGroupSSM(UsageEnvironment&, int, netAddressBits, netAddressBits)':
groupsock/GroupsockHelper.cpp:427: error: request for member 's_addr' in 'imr.ip_mreq_source::imr_multiaddr', which is of non-class type '__u32'
groupsock/GroupsockHelper.cpp:428: error: request for member 's_addr' in 'imr.ip_mreq_source::imr_sourceaddr', which is of non-class type '__u32'
groupsock/GroupsockHelper.cpp:429: error: request for member 's_addr' in 'imr.ip_mreq_source::imr_interface', which is of non-class type '__u32'

我不确定是什么导致了错误。任何指示都会很棒 - 没有双关语。谢谢

最佳答案

感谢大家的帮助。能够在我使用的 android g++ 编译器的包含文件版本中追踪到不同结构定义的错误。

事实证明,Android 平台的 g++ 包含文件非常受限。这些 header 中的结构定义采用以下形式:

struct in_addr
{
__u32 s_addr;
};

和:

struct ip_mreq_source {
__u32 imr_multiaddr;
__u32 in_addr imr_sourceaddr;
int some_other_var
};

所以我的 struct2、struct3 和 struct4 实际上是 __u32(在 asm/types.h 中定义的无符号整数),甚至在这个旧版本中都不是结构。为了解决这个问题,我将我的用法更改为:

struct struct1 st1;
st1.struct2 = Value

代替:

struct struct1 st1;
st1.struct2.s = Value;

谢谢你带领我走上正确的道路。

;

关于c++ - IN_ADDR 结构在 android 中奇怪地定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5040558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com