链接主机协议文本时,使用contrib/makefile交叉编译Tensorflow时出错

链接主机协议文本时,使用contrib/makefile交叉编译Tensorflow时出错,tensorflow,Tensorflow,我制作了一个简短的脚本来交叉编译tensorflow,在主机端链接proto_文本时,我发现链接器出现错误,但是我已经检查并链接了相应的库,它似乎包含正确的符号,请参见下文 版本:tensorflow@tags/v1.4.0-rc1 这是我要交叉编译的脚本。我无法使默认的compile\n nsync.sh脚本适用于我的案例 unset CC CXX AS AR pushd tensorflow/contrib/makefile/downloads/nsync/builds/x86_64.li

我制作了一个简短的脚本来交叉编译tensorflow,在主机端链接proto_文本时,我发现链接器出现错误,但是我已经检查并链接了相应的库,它似乎包含正确的符号,请参见下文

版本:tensorflow@tags/v1.4.0-rc1

这是我要交叉编译的脚本。我无法使默认的compile\n nsync.sh脚本适用于我的案例

unset CC CXX AS AR

pushd tensorflow/contrib/makefile/downloads/nsync/builds/x86_64.linux.gcc
CC=gcc AR=ar CXX=g++ AS=as make clean VERBOSE=1
CC=gcc AR=ar CXX=g++ AS=as make depend VERBOSE=1
CC=gcc AR=ar CXX=g++ AS=as make VERBOSE=1
HOST_NSYNC_LIB="$(pwd)/nsync.a"
popd

export CXX=arm-linux-gnueabihf-g++-6
export CC=arm-linux-gnueabihf-gcc-6
export AR=arm-linux-gnueabihf-ar
export AS=arm-linux-gnueabihf-as

pushd tensorflow/contrib/makefile/downloads/nsync/tools
rm -rf ../builds/arm.linux.arm-linux-gnueabihf-gcc-6
sh mkmakefile.sh -arch arm -os linux -cc arm-linux-gnueabihf-gcc-6
popd
pushd tensorflow/contrib/makefile/downloads/nsync/builds/arm.linux.arm-linux-gnueabihf-gcc-6
make clean VERBOSE=1
#make depend VERBOSE=1
make VERBOSE=1
TARGET_NSYNC_LIB="$(pwd)/nsync.a"
popd

export HOST_NSYNC_LIB TARGET_NSYNC_LIB
echo "HOST nsync: $HOST_NSYNC_LIB"
echo "TARGET nsync: $TARGET_NSYNC_LIB"


make -j -f tensorflow/contrib/makefile/Makefile \
     TARGET=LINUX CC_PREFIX="${CC_PREFIX}" \
     HOST_CC=gcc HOST_CXX=g++ \
     CXX=arm-linux-gnueabihf-g++-6 CC=arm-linux-gnueabihf-gcc-6 \
     CXX_FLAGS="-mfpu=neon-vfpv4 -ftree-vectorize" \
     HOST_NSYNC_LIB="$HOST_NSYNC_LIB" TARGET_NSYNC_LIB="$TARGET_NSYNC_LIB" \
     SUB_MAKEFILES="${SUB_MAKEFILES}" ${EXTRA_MAKE_ARGS[@]}
停顿错误

.... /work/opt/cortex-a7-myplatform/tensorflow/tensorflow/tensorflow/contrib/makefile/gen/host_obj/tensorflow/core/grappler/costs/op_performance_data.pb.o  -L/work/opt/cortex-a7-myplatform/tensorflow/tensorflow/tensorflow/contrib/makefile/gen/protobuf-host/lib -L/usr/local/lib /work/opt/cortex-a7-myplatform/tensorflow/tensorflow/tensorflow/contrib/makefile/downloads/nsync/builds/x86_64.linux.gcc/nsync.a -lstdc++ -lprotobuf -lpthread -lm -lz -ldl -lpthread
/work/opt/cortex-a7-myplatform/tensorflow/tensorflow/tensorflow/contrib/makefile/gen/host_obj/tensorflow/core/platform/env.o: In function `tensorflow::mutex::mutex()':
env.cc:(.text._ZN10tensorflow5mutexC2Ev[_ZN10tensorflow5mutexC5Ev]+0x14): undefined reference to `nsync::nsync_mu_init(nsync::nsync_mu_s_*)'
/work/opt/cortex-a7-myplatform/tensorflow/tensorflow/tensorflow/contrib/makefile/gen/host_obj/tensorflow/core/platform/env.o: In function `tensorflow::mutex::lock()':
env.cc:(.text._ZN10tensorflow5mutex4lockEv[_ZN10tensorflow5mutex4lockEv]+0x14): undefined reference to `nsync::nsync_mu_lock(nsync::nsync_mu_s_*)'
/work/opt/cortex-a7-myplatform/tensorflow/tensorflow/tensorflow/contrib/makefile/gen/host_obj/tensorflow/core/platform/env.o: In function `tensorflow::mutex::unlock()':
env.cc:(.text._ZN10tensorflow5mutex6unlockEv[_ZN10tensorflow5mutex6unlockEv]+0x14): undefined reference to `nsync::nsync_mu_unlock(nsync::nsync_mu_s_*)'
collect2: error: ld returned 1 exit status
tensorflow/contrib/makefile/Makefile:631: recipe for target '/work/opt/cortex-a7-myplatform/tensorflow/tensorflow/tensorflow/contrib/makefile/gen/host_bin/proto_text' failed
make: *** [/work/opt/cortex-a7-myplatform/tensorflow/tensorflow/tensorflow/contrib/makefile/gen/host_bin/proto_text] Error 1
注意:提供了nsync库,并且没有抛出错误,说明在上面引用时找不到它:/work/opt/cortex-a7-myplatform/tensorflow/tensorflow/contrib/makefile/downloads/nsync/builds/x86_64.linux.gcc/nsync.a

检查那里的图书馆,似乎有这些符号。所有三个缺少的方法都有T&U条目

$nm nsync.a | grep nsync_mu
                 U nsync_mu_semaphore_init
                 U nsync_mu_lock
                 U nsync_mu_semaphore_v
                 U nsync_mu_unlock
                 U nsync_mu_lock
                 U nsync_mu_lock_slow_
                 U nsync_mu_rlock
                 U nsync_mu_runlock
                 U nsync_mu_semaphore_v
                 U nsync_mu_unlock
0000000000000611 T nsync_mu_debug_state
0000000000000683 T nsync_mu_debug_state_and_waiters
00000000000006f5 T nsync_mu_debugger
00000000000009aa T nsync_mu_assert_held
0000000000000021 T nsync_mu_init
00000000000009e9 T nsync_mu_is_reader
0000000000000213 T nsync_mu_lock
0000000000000031 T nsync_mu_lock_slow_
00000000000009c8 T nsync_mu_rassert_held
00000000000002e3 T nsync_mu_rlock
0000000000000294 T nsync_mu_rtrylock
000000000000090a T nsync_mu_runlock
                 U nsync_mu_semaphore_p
                 U nsync_mu_semaphore_v
00000000000001c1 T nsync_mu_trylock
000000000000087d T nsync_mu_unlock
000000000000046c T nsync_mu_unlock_slow_
                 U nsync_mu_lock_slow_
                 U nsync_mu_unlock_slow_
000000000000041a T nsync_mu_unlock_without_wakeup
00000000000003e6 T nsync_mu_wait
0000000000000000 T nsync_mu_wait_with_deadline
                 U nsync_mu_lock
                 U nsync_mu_semaphore_v
                 U nsync_mu_trylock
                 U nsync_mu_unlock
                 U nsync_mu_wait
                 U nsync_mu_lock
                 U nsync_mu_unlock
                 U nsync_mu_lock
                 U nsync_mu_semaphore_p_with_deadline
                 U nsync_mu_unlock
                 U nsync_mu_semaphore_p_with_deadline
0000000000000000 T nsync_mu_semaphore_init
0000000000000007 T nsync_mu_semaphore_p
000000000000008e T nsync_mu_semaphore_p_with_deadline
00000000000001c7 T nsync_mu_semaphore_v

我错过了什么?感谢您阅读本文。

阅读不够仔细的经典案例

丢失的链接器错误表示他们正在查找表单的方法 nsync::nsync_mu_initnsync::nsync_mu_s.*

nm输出指定C样式的函数

< >错误可以通过编译并链接C++版本的NSyc而不是C版本来解决。