NaCl 端口:从 gawk 构建中排除 getopt
NaCl port : Excluding getopt from gawk build
几天来我一直在尝试移植 gawk,但我一直被这个问题困住了。我正在尝试制作一个在我的开发环境上运行的独立 gawk nexe(所以我使用的是静态 newlib 构建)。实际上,GNU Awk 4.1.1 有它的getopt.c、getopt.h 和几个文件的版本,这些文件的定义与GNU C 库中提供的定义相矛盾。我遇到多重定义错误。这是相关的控制台输出:
[... more lines ...]
Making all in .
make[2]: Entering directory '/home/agaurav77/Programs/NaCl/naclports/src/out/build/gawk/build_x86-64_newlib'
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary//toolchain/linux_x86_newlib/bin/x86_64-nacl-gcc -DNDEBUG -O2 -DNDEBUG -Dmain=nacl_main -D__GNU_LIBRARY__ -o gawk.nexe array.o awkgram.o builtin.o cint_array.o command.o debug.o dfa.o eval.o ext.o field.o floatcomp.o gawkapi.o gawkmisc.o getopt.o getopt1.o int_array.o io.o main.o mpfr.o msg.o node.o profile.o random.o re.o regex.o replace.o str_array.o symbol.o version.o -lmpfr -lgmp -lm -lm
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o): In function `getopt_long_only':
getopt.c:(.text+0x1600): multiple definition of `getopt_long_only'
getopt1.o:getopt1.c:(.text+0xa0): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o):(.bss+0x4): multiple definition of `optind'
getopt.o:(.data+0x0): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o):(.data+0x0): multiple definition of `opterr'
getopt.o:(.data+0x4): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o):(.data+0x4): multiple definition of `optopt'
getopt.o:(.data+0x8): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o): In function `getopt_long':
getopt.c:(.text+0x16c0): multiple definition of 'getopt_long'
getopt1.o:getopt1.c:(.text+0xe0): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o): In function `getopt':
getopt.c:(.text+0x1780): multiple definition of `getopt'
getopt.o:getopt.c:(.text+0x1e60): first defined here
collect2: ld returned 1 exit status
Makefile:643: recipe for target 'gawk.nexe' failed
make[2]: *** [gawk.nexe] Error 1
make[2]: Leaving directory'/home/agaurav77/Programs/NaCl/naclports/src/out/build/gawk/build_x86-64_newlib'
Makefile:727: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/agaurav77/Programs/NaCl/naclports/src/out/build/gawk/build_x86-64_newlib'
Makefile:546: recipe for target 'all' failed
make: *** [all] Error 2
naclports: Building gawk: failed.
关于如何克服这个问题的任何指示?
提前致谢。
由于 gawk 构建可能在存在其他 libc 的情况下使用 getopt 运行,我建议您弄清楚为什么 configure 在后备版本中添加。
很可能某种测试可执行文件正在由 configure 构建并且某些东西失败了。我建议在配置脚本中搜索 getopt 以了解它可能尝试执行此操作的位置。然后搜索配置期间生成的 config.log 文件以找出失败的原因。
一种可能性是,某些需要 运行 测试可执行文件以检查损坏的功能的构建倾向于假设交叉编译构建的损坏功能。
如果所有其他方法都失败了,您可以通过在定义时将 getopt.c 的内容定义出来来关闭内置版本(native_client)
几天来我一直在尝试移植 gawk,但我一直被这个问题困住了。我正在尝试制作一个在我的开发环境上运行的独立 gawk nexe(所以我使用的是静态 newlib 构建)。实际上,GNU Awk 4.1.1 有它的getopt.c、getopt.h 和几个文件的版本,这些文件的定义与GNU C 库中提供的定义相矛盾。我遇到多重定义错误。这是相关的控制台输出:
[... more lines ...]
Making all in .
make[2]: Entering directory '/home/agaurav77/Programs/NaCl/naclports/src/out/build/gawk/build_x86-64_newlib'
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary//toolchain/linux_x86_newlib/bin/x86_64-nacl-gcc -DNDEBUG -O2 -DNDEBUG -Dmain=nacl_main -D__GNU_LIBRARY__ -o gawk.nexe array.o awkgram.o builtin.o cint_array.o command.o debug.o dfa.o eval.o ext.o field.o floatcomp.o gawkapi.o gawkmisc.o getopt.o getopt1.o int_array.o io.o main.o mpfr.o msg.o node.o profile.o random.o re.o regex.o replace.o str_array.o symbol.o version.o -lmpfr -lgmp -lm -lm
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o): In function `getopt_long_only':
getopt.c:(.text+0x1600): multiple definition of `getopt_long_only'
getopt1.o:getopt1.c:(.text+0xa0): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o):(.bss+0x4): multiple definition of `optind'
getopt.o:(.data+0x0): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o):(.data+0x0): multiple definition of `opterr'
getopt.o:(.data+0x4): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o):(.data+0x4): multiple definition of `optopt'
getopt.o:(.data+0x8): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o): In function `getopt_long':
getopt.c:(.text+0x16c0): multiple definition of 'getopt_long'
getopt1.o:getopt1.c:(.text+0xe0): first defined here
/home/agaurav77/Programs/NaCl/nacl_sdk/pepper_canary/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/lib/../lib64/libcrt_common.a(lib_a-getopt.o): In function `getopt':
getopt.c:(.text+0x1780): multiple definition of `getopt'
getopt.o:getopt.c:(.text+0x1e60): first defined here
collect2: ld returned 1 exit status
Makefile:643: recipe for target 'gawk.nexe' failed
make[2]: *** [gawk.nexe] Error 1
make[2]: Leaving directory'/home/agaurav77/Programs/NaCl/naclports/src/out/build/gawk/build_x86-64_newlib'
Makefile:727: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/agaurav77/Programs/NaCl/naclports/src/out/build/gawk/build_x86-64_newlib'
Makefile:546: recipe for target 'all' failed
make: *** [all] Error 2
naclports: Building gawk: failed.
关于如何克服这个问题的任何指示?
提前致谢。
由于 gawk 构建可能在存在其他 libc 的情况下使用 getopt 运行,我建议您弄清楚为什么 configure 在后备版本中添加。 很可能某种测试可执行文件正在由 configure 构建并且某些东西失败了。我建议在配置脚本中搜索 getopt 以了解它可能尝试执行此操作的位置。然后搜索配置期间生成的 config.log 文件以找出失败的原因。
一种可能性是,某些需要 运行 测试可执行文件以检查损坏的功能的构建倾向于假设交叉编译构建的损坏功能。
如果所有其他方法都失败了,您可以通过在定义时将 getopt.c 的内容定义出来来关闭内置版本(native_client)