gpt4 book ai didi

java - 体系结构 x86_64 : "_fcloseall" 的 undefined symbol

转载 作者:可可西里 更新时间:2023-11-01 15:20:51 24 4
gpt4 key购买 nike

我正在编译 hadoop-yarn-nodemanager。

编译环境:MacOS-10.14java-1.7.0_80cmake3.13.0-rc3clang-1000.10。 44.4Maven 3.6.0protocbuf 2.5.0

我正在尝试在 MacOS 上安装 Hadoop-2.2.0,但如其文档所示,

The native hadoop library is supported on *nix platforms only. The library does not to work with Cygwin or the Mac OS X platform.

所以我不得不重新编译Hadoop的源代码。在下载的hadoop-2.2.0-src文件夹中,运行mvn package -Pdist,native -DskipTests -Dtar,新的原生库应该在 hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0/lib/native 经过几分钟的编译。但是,我不断收到错误消息。有些已经通过修改源代码修复,但现在我被困在编译 hadoop-yarn-server-nodemanager 中。

Compiling Process Now

这是错误信息:

 [exec] [ 57%] Linking C executable target/usr/local/bin/test-container-executor
[exec] /Applications/CMake.app/Contents/bin/cmake -E cmake_link_script CMakeFiles/test-container-executor.dir/link.txt --verbose=1
[exec] /Library/Developer/CommandLineTools/usr/bin/cc -g -Wall -O2 -D_GNU_SOURCE -D_REENTRANT -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/test-container-executor.dir/main/native/container-executor/test/test-container-executor.c.o -o target/usr/local/bin/test-container-executor libcontainer.a
[exec] Undefined symbols for architecture x86_64:
[exec] "_fcloseall", referenced from:
[exec] _launch_container_as_user in libcontainer.a(container-executor.c.o)
[exec] ld: symbol(s) not found for architecture x86_64
[exec] clang: error: linker command failed with exit code 1 (use -v to see invocation)
[exec] make[2]: *** [target/usr/local/bin/test-container-executor] Error 1
[exec] make[1]: *** [CMakeFiles/test-container-executor.dir/all] Error 2
[exec] make: *** [all] Error 2

我尝试将 cmake 的编译器从 clang 切换到 gcc,但没有用。

与错误消息相关,我发现以下代码。

hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/CMakeLists.txt 中:

add_executable(test-container-executor
main/native/container-executor/test/test-container-executor.c
)
target_link_libraries(test-container-executor
container
)
output_directory(test-container-executor target/usr/local/bin)

hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/配置.c:

int launch_container_as_user(const char *user, const char *app_id, 
const char *container_id, const char *work_dir,
const char *script_name, const char *cred_file,
const char* pid_file, char* const* local_dirs,
char* const* log_dirs, const char *resources_key,
char* const* resources_values) {...}

hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/target/native/CMakeFiles/test-container-executor .dir/link.txt:

/Library/Developer/CommandLineTools/usr/bin/cc  -g -Wall -O2 -D_GNU_SOURCE -D_REENTRANT -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/test-container-executor.dir/main/native/container-executor/test/test-container-executor.c.o  -o target/usr/local/bin/test-container-executor libcontainer.a 

至于压缩文件hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/target/native/libcontainer.a ,解压后找到了container-executor.c.o,但是打开失败,编码问题。

此外,之前编译该项目时出现的错误:

 [exec] /Users/markdana/Downloads/hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c:1252:48: error: too many arguments to function call, expected 4, have 5
[exec] if (mount("none", mount_path, "cgroup", 0, controller) == 0) {
[exec] ~~~~~ ^~~~~~~~~~
[exec] /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/sys/mount.h:399:1: note: 'mount' declared here
[exec] int mount(const char *, const char *, int, void *);

为了修复它,我将 mount.h 中函数 mount() 的声明修改为:

int mount(const char *, const char *, const char *,int, const char *);

这有点愚蠢,我知道,但它至少有效。然后遇到问题中显示的新问题。我想知道他们是否担心,或者链接库的一些错误。

调试了一整天,不知所措。如果您能指出关键,或分享一些处理 cmake 链接问题的类似经验,我们将不胜感激。

最佳答案

似乎函数 fcloseall 在 OS X 上不存在。来自 Porting UNIX/Linux Applications to OS X :

fcloseall

This function is an extension to fclose. Although OS X supports fclose, fcloseall is not supported. You can use fclose to implement fcloseall by storing the file pointers in an array and iterating through the array.

您需要重新设计应用程序并存储应该用fcloseall 关闭的每个文件。之后,您可以对每个此类文件使用简单的关闭,如引用中所述。

关于java - 体系结构 x86_64 : "_fcloseall" 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53248756/

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