目录
本文讲解DPDK编译错误Permission denied与RTE_MAX_LCORE undeclared here (not in a function) 解决方法。
一、报错
将windows版可以调试通编译没有问题的dpdk代码文件上传到svn服务器后,在linux下编译dpdk时,就会遇到“Permission denied”的问题,具体如下所示。
make[1]: execvp: dpdk-1.7/scripts/relpath.sh: Permission denied
make[1]: execvp: dpdk-1.7/scripts/relpath.sh: Permission denied
/bin/sh: line 1: dpdk-1.7/scripts/gen-build-mk.sh: Permission denied
make[1]: *** [ dpdk-1.7/build/Makefile] Error 126
make: *** [config] Error 2
/bin/sh: line 1: dpdk-1.7/scripts/depdirs-rule.sh: Permission denied
make[7]: *** [depdirs] Error 126
make[6]: *** [depdirs] Error 2
make[5]: *** [depdirs] Error 2
/bin/sh: line 1: dpdk-1.7/scripts/depdirs-rule.sh: Permission denied
二、解决问题
1、添加dpdk目录权限
通过为dpdk目录添加权限解决问题,chmod 是用于修改文件或目录权限的命令;-R 表示递归操作,即对指定目录及其下所有子目录和文件都进行权限修改;777 代表权限设置,第一个 7 针对文件所有者,第二个 7 针对所属组,第三个 7 针对其他用户,都赋予读、写、执行权限,具体命令如下所示。
chmod -R +777 ./dpdk1-1.7
再次编译后,报错“error: "RTE_MAX_LCORE" is not defined”,详细的错误信息如下所示。
In file included from dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:61:
dpdk-1.7/build/include/rte_eal.h:76: error: RTE_MAX_LCORE undeclared here (not in a function)
In file included from dpdk-1.7/build/include/rte_rwlock.h:54,
from dpdk-1.7/build/include/rte_eal_memconfig.h:41,
from dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:62:
dpdk-1.7/build/include/rte_atomic.h:54:5: error: "RTE_MAX_LCORE" is not defined
In file included from dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:62:
dpdk-1.7/build/include/rte_eal_memconfig.h:82: error: RTE_MAX_MEMSEG undeclared here (not in a function)
dpdk-1.7/build/include/rte_eal_memconfig.h:83: error: RTE_MAX_MEMZONE undeclared here (not in a function)
dpdk-1.7/build/include/rte_eal_memconfig.h:88: error: RTE_MAX_TAILQ undeclared here (not in a function)
dpdk-1.7/build/include/rte_eal_memconfig.h:91: error: RTE_MAX_NUMA_NODES undeclared here (not in a function)
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c: In function eal_parse_sysfs_value
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:177: error: RTE_LOG_LEVEL undeclared (first use in this function)
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:177: error: (Each undeclared identifier is reported only once
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:177: error: for each function it appears in.)
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c: In function eal_proc_type_detect
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:285: error: RTE_LOG_LEVEL undeclared (first use in this function)
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c: In function eal_parse_coremask
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:447: error: RTE_LOG_LEVEL undeclared (first use in this function)
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c: In function eal_parse_socket_mem
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:520: error: RTE_LOG_LEVEL undeclared (first use in this function)
cc1: warnings being treated as errors
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c: In function eal_parse_args
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:721: error: RTE_LOG_LEVEL undeclared (first use in this function)
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c: In function eal_check_mem_on_local_socket
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:963: error: RTE_LOG_LEVEL undeclared (first use in this function)
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c: In function 鈥榬te_eal_init
dpdk-1.7/lib/librte_eal/linuxapp/eal/eal.c:1037: error: RTE_LOG_LEVEL undeclared (first use in this function)
make[5]: *** [eal.o] Error 1
make[4]: *** [eal] Error 2
make[3]: *** [linuxapp] Error 2
make[2]: *** [librte_eal] Error 2
make[1]: *** [lib] Error 2
make: *** [all] Error 2
2、svn添加权限
遇到这个问题,需要使用svn将文件可执行权限添加,否则svn目录再次下载后依然遇到这个问题。接下来为 dpdk-1.7/ 目录及其下的文件设置 svn:executable 属性,使这些文件在从 SVN 仓库检出到本地时具有可执行权限。具体执行如下命令
svn propset svn:executable on dpdk-1.7/
参数的具体含义如下所示:
- svn:这是 Subversion 版本控制系统的命令行工具,用于与 SVN 仓库进行交互,执行如提交、更新、查看日志等操作。
- propset:是 svn 命令的一个子命令,代表 “property set”,用于设置文件或目录的属性。在 SVN 中,属性是与文件或目录关联的键值对,可用于存储额外的元数据。
- svn:executable:这是 SVN 预定义的一个属性,用于标记文件是否具有可执行权限。当设置此属性后,从 SVN 仓库检出文件时,文件会被赋予相应的可执行权限。
- on:表示将 svn:executable 属性的值设置为 “开启” 状态,意味着文件具有可执行权限。
- dpdk - 1.7/:指定要设置属性的目标对象,这里是一个名为 dpdk - 1.7 的目录。该命令会对该目录下的所有文件递归地设置 svn:executable 属性。
发现不让直接添加目录权限, 于是我进入出现问题的脚本目录,增加权限,具体操作如下所示。
cd scripts/
svn propset svn:executable on *
然后执行如下命令,发现文件权限已被更改。
svn diff
接下来再次提交回svn服务器即可。
svn ci -m "fix svn:executable for dpdk1.7" dpdk-1.7/
接下来删除dpdk目录中build子目录,然后重新编译即可不报错