ldd:FATAL: 실행 파일에서 해결되지 않은 기호 'getopt_long' 호출 - arm에서 QNX를 사용하여 컴파일된 바이너리. 왜?

ldd:FATAL: 실행 파일에서 해결되지 않은 기호 'getopt_long' 호출 - arm에서 QNX를 사용하여 컴파일된 바이너리. 왜?

이것블랙베리 플레이북공식적으로 도달했습니다단종(2014년 4월), 하지만 이미 설치했습니다.BGShell,BGSSH-SCP-SFTP, 그리고용어 48위에. 그래서 나한테 좀 있어케시- GNU 3.1.5 awk, 4.1.5 sedgrep기타 쉘 과 같습니다.python일부다른핵심 도구요소 (그러나 없음 tr) 등 그래요루트가 아님. 기본적으로 Downloads디렉토리 에서 이 작업을 수행할 수 있습니다 .$HOME쉘 애플리케이션에 의해 생성된 디렉토리( /accounts/1000/appdata/com.BGShell..blabla/data예를 들어)는 모든 것을 실행할 수는 없지만 일반적으로 위에서 언급한 제한 내에서 스크립트를 실행할 수 있습니다. 제가 관심을 갖는 이유는 바로 이것이기 때문입니다.QNX존재하다피질-A9.:

QNX localhost 6.6.0 2014/03/19-01:28:41EDT OMAP4430_ES2.2_HS_Winchester_Rev:07 armle

그래서 악용하려고 했어요오래된 프로젝트1. 이 기능이 작동하려면 변경해야 할 사항이 많이 있지만 대부분의 대상( gcc2coreutils-8.13 포함 ) 에 대해 설정 및 컴파일할 수 있습니다 . 도착하다요약하다, 일부 오류를 피하기 위해 다양한 구성 플래그 변형과 일부 이전 버전의 개발 도구를 사용하여 컴파일했습니다. 비슷한 문제를 해결했습니다.

CFLAGS="-march=armv7-a -marm -fno-strict-aliasing -mtune=cortex-a9 -O2 -pipe -fomit-frame-pointer -mlittle-endian"
AUTOMAKE=automake-1.11: AUTOCONF=: AUTOHEADER=: AUTORECONF=: ACLOCAL=aclocal-1.11: MAKEINFO=makeinfo-4.13a

arm-unknown-nto-qnx8.0.0eabi-gcc크로스 컴파일러 와 연결10.3 소프트웨어 개발 키트안쪽에 위치해 있어요기세IDE. 결과 바이너리는 다음과 같습니다.

ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), BuildID[md5/uuid]=41442b23fecda2d1d7cc5d2c68432a33, not stripped

그러나 그들 모두는 다음과 같은 메시지와 함께 태블릿에 오류를 표시합니다.

ldd:FATAL: Unresolved symbol "getopt_long" called from Executable

다른 플래그를 사용하여 여러 번 다시 컴파일하고 항상 해당 메시지를 받기 때문에 이전 SDK를 대상으로 했기 때문에 빌드 스크립트에서 컴파일러 이외의 다른 것을 잘못 연결했을 수도 있다고 생각합니다... ...(이것은 내 전문 지식을 넘어서지만, 어쩌면 가비지 수집에 관한 것일 수도 있습니다. 즉 collect?). 아니면 대상 플랫폼에서 이상한 구성입니까?

설정(및 경험 부족)으로 인해 여기에는 백만 가지 문제가 발생할 수 있지만 몇 가지 단서를 찾고 있으므로 이와 같은 오류에서 이해해야 할 구체적인 내용이 있으며 일반적으로 어떻게 역추적합니까? 문제?


1. 전체적으로 스크립트 묶음입니다.가져와,수리하다,엮다,설치하다그런 다음 디렉토리로 이동하십시오.묶음디렉토리를 zip 파일로 압축한 다음 멋진 파일을 생성합니다.루비 웹릭서버, 태블릿을 사용하여 스크립트를 다운로드하고 보관합니다(250MB를 보관하는 데 사용하지 않고 웹 파일 호스트와 브라우저를 사용합니다).

2.삭제했습니다루비,문서, 그리고루비최상위 빌드 구성의 대상입니다.

답변1

이는 두 가지 다른 SDK 1 문제를 혼동하는 것입니다.선택 항목을 길게 가져옵니다. 존재하다존재하다QNX6.6. 하지만 libc위 버전은스크립트 하지 그이전 버전이 있기 때문에/프로세스. 설치하면 오류가 발생하지 않습니다플레이북 OS 네이티브 SDK v2.1.0맹목적으로 유행을 따르기보다는협회프로젝트에서 이것이 설치됩니다네이티브 SDK v10.32.1로통합 개발 환경~을 위한BB10. 프로젝트 정보는 명확하지만 링크가 올바른 SDK로 연결되지 않습니다. 그래서 결국에는 BB10에서 실행되는 바이너리일 가능성이 높지만 인프라는 정확히 동일하지 않습니다. 흥미롭게도 이와 같은 기능은 grepBB SDK로 컴파일할 때 작동하지만 긴 옵션에 대한 답변을 거부합니다...--version


하지만 올바른 SDK를 사용하면 문제가 없습니다. 대부분의 대상이 다시 컴파일 되었습니다 2 . 이 모든 일이 일어났습니다아치 리눅스 x84_64어디도쿠저장소가 활성화되어 있습니다(그리고 많은lib32-당겨진 패키지). 이것은 내가 3build.sh 에 사용하는 구성 블록입니다 .gcc

CONFIGURE_CMD="$EXECDIR/gcc/configure
           --host=$PBHOSTARCH 
           --build=$PBBUILDARCH 
           --target=$PBTARGETARCH 
           --srcdir=$EXECDIR/gcc 
           --with-as=ntoarm-as 
           --with-ld=ntoarm-ld 
           --with-sysroot=$BBTOOLS/target/qnx6/ 
           --disable-werror 
           --prefix=$DESTDIR 
           --exec-prefix=$DESTDIR 
           --enable-cheaders=c 
           --enable-languages=c 
           --enable-threads=posix 
           --disable-nls
           --disable-libssp 
           --disable-tls 
           --disable-libstdcxx-pch
           --disable-newlib-supplied-syscalls
           --enable-libmudflap 
           --enable-__cxa_atexit 
           --with-gxx-include-dir=$BBTOOLS/target/qnx6/usr/include 
           --enable-shared
           --disable-subdir-texinfo
           --enable-cross-compile
           --enable-shared
           CC=$PBTARGETARCH-gcc
           CFLAGS='-march=armv7-a -marm -fno-strict-aliasing -mtune=cortex-a9 -O2 -pipe -fomit-frame-pointer -mlittle-endian'
           LDFLAGS='-Wl,-s '
           MAKEOPTS="-j5"
           AUTOMAKE=automake-1.11: AUTOCONF=: AUTOHEADER=: AUTORECONF=: ACLOCAL=aclocal-1.11: MAKEINFO=makeinfo-4.13a

coreutils둘 다 작동하며 별칭 과 옵션이 gcc있습니다 .lsgrep--color

여기에 이미지 설명을 입력하세요.

마지막 기능 tr스크립트에 대한 보기 드문 통찰력을 제공합니다.QNX!


1. 감사합니다라이언 맨스필드@Foundry27 참고하세요@엠마누엘정보를 얻고 있어요!

2. 대상 제외: file, man, ruby, findutils. 결과 아카이브 크기는 80Mib입니다.ruby 웹릭서버는 예상대로 배포하는 데 사용됩니다.

3. ...둘 모두에 대해 gcc그리고 coreutils실제로(후자의 경우 기본값 추가). 모든 옵션이 필수인지 권장되는지는 확실하지 않습니다. 각 대상은 build.sh적절한 디렉터리( bootstrap/target예: bootstrap/gcc/build.sh. 빌드 환경( )은 ie 옵션을 bbndk-env.sh사용하여 전역 최상위 build.sh 스크립트에 의해 한 번 획득되어야 합니다 . 소스 코드는 빌드된 디렉터리 에 추출됩니다 . 빌드가 성공하고 옵션이 제공되지 않으면(프로젝트 루트 참조 ) 아카이브로 압축될 디렉터리 구조 에 추가됩니다 (아카이브는 실행 중인 장치의 $HOME 디렉터리에 배포됩니다).-bbuild.sh -b /path/to/bbndk-2.10work/targetlib.shpbhomeBGShell). 참고사항도 참고해주세요다윈나는lib.shx86_64나는. 그렇지 않으면 원래 프로젝트 구성에 대한 변경 사항이 없습니다 arm-unknown-nto-qnx6.5.0eabi(Q에서 버전 8.0.0 및 BB10.3 SDK를 사용하는 것과는 다름). 따라서 문제가 있는 몇 가지 대상을 제거하고 나면 컴파일이 매우 쉬워졌습니다.

관련 정보