我在C編譯錯誤,涉及的宏,這是駕駛我堅果。這不是我的代碼,而是廣泛使用的庫的一部分。我給你後面的故事,因爲我知道我會問,否則。C代碼宏編譯錯誤(AOSP:外部/ clearsilver/util的/ neo_err.h)
我試圖建立Android開源項目(AOSP)的Droid的2.3版,在Ubuntu v.16.04,通過GNU製作v.3.81。我遇到很多錯誤,這都與回本小學一:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
根據這個傢伙的「問Ubuntu的」,他在安裝libswitch-perl
後遇到這個問題:
那似乎是一個非常奇怪的原因!我從來沒有以前編譯AOSP,所以我不能做一個比較的要求。對於它的價值,我沒有安裝。
dpkg-query: package 'libswitch-perl' is not installed and no information is available
忽略其他任何東西,讓我們來深入瞭解更多細節。下面是相關clearsilver碼:上線時
#if defined(USE_C99_VARARG_MACROS)
#define nerr_raise(e,f,...) \
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
#elif defined(USE_GNUC_VARARG_MACROS)
#define nerr_raise(e,f,a...) \
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,##a)
#endif
NEOERR *nerr_raisef (const char *func, const char *file, int lineno,
NERR_TYPE error, const char *fmt, ...)
ATTRIBUTE_PRINTF(5,6);
錯誤:
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
我累了移動的宏定義到nerr_raisef函數定義之後,而且沒有任何影響。我也試過這些行(這是失敗的行之前插入),以幫助查找問題:
#define mytest1 __PRETTY_FUNCTION__
#define myitest2 __FILE__
#define mytest3 __LINE__
#define mytest4(...) __VA_ARGS__
#define mytest5(e,f) nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f)
#define mytest6(e,f,...) nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f)
#define mytest7(e,f,...) nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
#define mytest8(e,f,...) \
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
#ifdef nerr_raise
x
#endif
萬無一失那些。請注意,mytest8
宏是完全相同的該死的東西,用不同的名稱,並編譯!此外,鬆散x
不包括在內,即nerr_raise先前未定義。
這裏就是整個輸出運行時,make
我得到:
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.4
TARGET_PRODUCT=imx53_smd
TARGET_BUILD_VARIANT=user
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRJ22
============================================
build/core/main.mk:303: implicitly installing apns-conf_sdk.xml
find: ‘frameworks/base/frameworks/base/docs/html’: No such file or directory
find: ‘out/target/common/docs/gen’: No such file or directory
find: ‘frameworks/base/frameworks/base/docs/html’: No such file or directory
find: ‘out/target/common/docs/gen’: No such file or directory
find: ‘frameworks/base/frameworks/base/docs/html’: No such file or directory
find: ‘out/target/common/docs/gen’: No such file or directory
find: ‘frameworks/base/frameworks/base/docs/html’: No such file or directory
find: ‘out/target/common/docs/gen’: No such file or directory
find: ‘frameworks/base/frameworks/base/docs/html’: No such file or directory
find: ‘out/target/common/docs/gen’: No such file or directory
No private recovery resources for TARGET_DEVICE imx53_smd
host Java: droiddoc (out/host/common/obj/JAVA_LIBRARIES/droiddoc_intermediates/classes)
host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.c
host C: libneo_util <= external/clearsilver/util/neo_files.c
host C: libneo_util <= external/clearsilver/util/ulist.c
host C: libneo_util <= external/clearsilver/util/neo_hdf.c
host C: libneo_util <= external/clearsilver/util/neo_str.c
host C: libneo_util <= external/clearsilver/util/ulocks.c
host C: libneo_util <= external/clearsilver/util/neo_hash.c
In file included from external/clearsilver/util/ulist.c:19:0:
external/clearsilver/util/ulist.c: In function ‘uListInit’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/ulist.c:64:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to create ULIST: Out of memory");
^
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/ulist.c:70:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to create ULIST: Out of memory");
^
external/clearsilver/util/ulist.c: In function ‘uListPop’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/ulist.c:124:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_OUTOFRANGE, "uListPop: empty list");
^
In file included from external/clearsilver/java-jni/j_neo_util.c:6:0:
external/clearsilver/java-jni/j_neo_util.c: In function ‘jni_fileload_cb’:
external/clearsilver/java-jni/../util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/java-jni/j_neo_util.c:257:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_ASSERT,
^
external/clearsilver/java-jni/../util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/java-jni/j_neo_util.c:268:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_ASSERT,
^
In file included from external/clearsilver/util/neo_files.c:26:0:
external/clearsilver/util/neo_files.c: In function ‘ne_listdir_fmatch’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_files.c:219:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_ASSERT, "Invalid call to ne_listdir_fmatch");
^
In file included from external/clearsilver/util/neo_hdf.c:24:0:
external/clearsilver/util/neo_hdf.c: In function ‘_alloc_hdf’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hdf.c:62:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise (NERR_NOMEM, "Unable to allocate memory for hdf element");
^
In file included from external/clearsilver/util/neo_str.c:22:0:
external/clearsilver/util/neo_str.c: In function ‘string_appendvf’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_str.c:167:14: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM,
^
external/clearsilver/util/neo_str.c: In function ‘string_array_split’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_str.c:223:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise (NERR_ASSERT, "separator must be at least one character");
^
external/clearsilver/util/neo_hdf.c: In function ‘hdf_set_attr’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hdf.c:409:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_ASSERT, "Unable to set attribute on none existant node");
^
external/clearsilver/util/neo_hdf.c: In function ‘_set_value’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hdf.c:648:14: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to allocate memory");
^
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hdf.c:795:16: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to allocate memory");
^
external/clearsilver/util/neo_hdf.c: In function ‘hdf_set_valuevf’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hdf.c:869:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to allocate memory for format string");
^
external/clearsilver/util/neo_hdf.c: In function ‘_copy_attr’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hdf.c:1028:14: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to allocate copy of HDF_ATTR");
^
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hdf.c:1036:14: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to allocate copy of HDF_ATTR");
^
In file included from external/clearsilver/util/ulocks.c:22:0:
external/clearsilver/util/ulocks.c: In function ‘fLock’:
external/clearsilver/util/neo_err.h:102:75: error: expected expression before ‘)’ token
nerr_raise_errnof(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/ulocks.c:96:12: note: in expansion of macro ‘nerr_raise_errno’
return nerr_raise_errno (NERR_LOCK, "File lock failed");
^
In file included from external/clearsilver/util/neo_hash.c:18:0:
external/clearsilver/util/neo_hash.c: In function ‘ne_hash_init’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hash.c:30:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to allocate memory for NE_HASH");
^
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hash.c:41:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to allocate memory for NE_HASHNODES");
^
external/clearsilver/util/neo_hdf.c: In function ‘hdf_write_string’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hdf.c:1342:28: note: in expansion of macro ‘nerr_raise’
if (*s == NULL) return nerr_raise(NERR_NOMEM, "Unable to allocate empty string");
^
external/clearsilver/util/neo_hash.c: In function ‘ne_hash_insert’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hash.c:91:14: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to allocate NE_HASHNODE");
^
external/clearsilver/util/neo_hash.c: In function ‘_hash_resize’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hash.c:229:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_NOMEM, "Unable to allocate memory to resize NE_HASH");
^
external/clearsilver/util/neo_hdf.c: In function ‘hdf_read_file’:
external/clearsilver/util/neo_err.h:88:69: error: expected expression before ‘)’ token
nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
^
external/clearsilver/util/neo_hdf.c:1834:12: note: in expansion of macro ‘nerr_raise’
return nerr_raise(NERR_ASSERT, "Can't read NULL file");
^
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libclearsilver-jni_intermediates/j_neo_util.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_util_intermediates/neo_files.o] Error 1
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_util_intermediates/ulist.o] Error 1
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_util_intermediates/neo_str.o] Error 1
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_util_intermediates/ulocks.o] Error 1
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_util_intermediates/neo_hash.o] Error 1
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_util_intermediates/neo_hdf.o] Error 1
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
/bin/bash: jar: command not found
make: *** [out/host/common/obj/JAVA_LIBRARIES/droiddoc_intermediates/javalib.jar] Error 127
是整個錯誤? Usualy g ++將添加更多信息(註釋),即。關於這個宏被使用的地方。通常原因可能是缺少在宏調用中使用的定義(空)。 – marcinj
還有其他一些與此相關的錯誤。我會發布這些以防萬一。謝謝! – BuvinJ
查看修改後的帖子。 – BuvinJ