尝试编译Linux源代码时出错

时间:2014-06-30 07:58:16

标签: linux

我不太喜欢编码/编程,但我正在尝试编译Linux Source。

以下错误消息显示:

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;

1 个答案:

答案 0 :(得分:0)

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

您需要找到主程序中调用parseIP的位置。见上文第二个参数是const char *in。您正确地进行了正确的求和,这可能是生成错误的地方。如果您在主程序中检入调用parseIP的位置,您可能会发现您的程序将char *参数传递给const char *而不是parseIP。您可以通过将传递给somevar = parseIP( outvar, stringin ) 的值转换为(char *)来在代码中更正此示例:如果您发现:

(char *)

将第二个参数转换为somevar = parseIP( outvar, (char *)stringin )

cheat

或者您可以只使用编译器[-fpermissive]。它会告诉你如何做到这一点。请注意-fpermissive作为警告的一部分。您很可能只是将gcc -Wall -o outfile yourfile.cpp 标志传递给编译器并让它工作。如果你正在编译:

gcc -Wall -o outfile yourfile.cpp -fpermissive

尝试使用:

-fpermissive

现在,所有的法律资格和免责声明都适用,你最好解决上面提到的那个警告/错误的原因,但你也可以在大多数情况下通过{{1}}作为临时解决方法