gpt4 book ai didi

linux - 尝试编译 Linux 源代码时出错

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:36 25 4
gpt4 key购买 nike

我不太擅长编码/编程,但我正在尝试编译 Linux 源代码。

显示以下错误消息:

error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
char *ptr = strchr( in, ch );

虽然“谷歌搜索”,但我找不到有用的答案。我猜这是失败的部分:

//////////////////////////////////////////////////////////////////////////
/// Parses an IP address string
///
/// @param[out] out array containing the IP address in raw 4-byte format
/// @param in string containing an IP address in 'nnn.nnn.nnn.nnn'
/// notation
//////////////////////////////////////////////////////////////////////////
int parseIP( uint8_t *out, const char *in )
{
in_addr addr, haddr;
int c = 0;
int ch = '.';
char *ptr = strchr( in, ch );

while( ptr ) {
++c;
ptr = strchr( ptr + 1, ch );
}

if( c != 3 )
return -EINVAL;

if( inet_aton( in, &addr ) == 0 )
return -EINVAL;

haddr.s_addr = ntohl( addr.s_addr );

for( int i = 0; i < 4; ++i )
out[ i ] = ((uint8_t *)&haddr.s_addr)[ 3 - i ];

return 0;
}

希望大家能帮忙。

问候,标记

嗨大卫,

我发现该部分已被调用并尝试更改它,但在使用“make”命令时仍然出现相同的错误消息。

 case 'i':
if( getuid() != 0 ) {
std::cerr << "Error: you need to have "
"root privileges in "
"order to use the "
"-i/--ipaddr option"
<< std::endl;
exit( 1 );
}

if( strncmp( optarg, "dhcp", 4 ) == 0 &&
strlen( optarg ) == 4 )
opt_devip_dhcp = 1;
else if( parseIP( opt_devip, (char *)optarg ) ) {
std::cerr << "Error: bad IP address" <<
std::endl;
exit( 3 );
}

opt_devip_set = 1;
break;
case 'm':
if( parseIP( opt_devmask, (char *)optarg ) ) {
std::cerr << "Error: bad network mask" <<
std::endl;
exit( 7 );
}

opt_devmask_set = 1;
break;

最佳答案

int parseIP( uint8_t *out, const char *in )

您需要找到主程序中调用 parseIP 的位置。请参阅上面第二个参数是如何const char *in。您总结正确,这可能就是生成错误的地方。如果您检查调用 parseIP 的主程序,您可能会发现您的程序向其传递了 char * 参数,而不是 const char *。您可以在代码中更正此问题,方法是将传递给 parseIP 的值转换为 (char *) 示例:如果您发现以下内容:

somevar = parseIP( outvar, stringin )

将第二个参数转换为(char *):

somevar = parseIP( outvar, (char *)stringin )

或者你可以用编译器作弊。它为您提供了如何操作的提示。请注意 [-fpermissive] 作为警告的一部分。您很可能只需将 -fpermissive 标志传递给编译器并让它工作。如果您使用以下内容进行编译:

gcc -Wall -o outfile yourfile.cpp

尝试一下:

gcc -Wall -o outfile yourfile.cpp -fpermissive

现在,所有法律资格和免责声明均适用,您最好按照上述方式解决收到警告/错误的原因,但大多数情况下您也可以传递 -fpermissive 作为临时解决方法。

关于linux - 尝试编译 Linux 源代码时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24485406/

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