지금 당장 해결해야 할 특정 문제가 있지만 이런 종류의 문제(다른 사람의 코드를 컴파일할 때 발생하는 분할 오류)를 해결하기 위한 좋은 전략을 알고 싶습니다. 따라서 특정 또는 일반적인 유형의 답변.
세부
설치하려고 하는데OpenSSLSynology DS412+의 경우 1.0.1g. 버전걸프 협력 협의회광산(v4.2.1)은 64비트용으로 컴파일되지 않았으며 OpenSSL은 다음과 같이 불평합니다.
$ ./config --prefix=/opt \
--openssldir=/etc/ssl \
--libdir=lib \
shared \
zlib-dynamic
$ make
전단!
cryptlib.c:1: sorry, unimplemented: 64-bit mode not compiled in
cryptlib.c: In function 'OPENSSL_ia32cap_loc':
cryptlib.c:677: warning: dereferencing type-punned pointer will break strict-ali
asing rules
make[1]: *** [cryptlib.o] Error 1
그래서, GCC 4.8.2를 설치하려고 하는데(지금은 여러 버전을 사용해 보았지만) 매번 실패하는 것 같습니다좋은 제조 관행의 일부 make
. 이런 일이 너무 자주 일어나서 GMP를 다운로드하고 컴파일해 보기로 결정했습니다.
$ ./configure --prefix=/opt --build=i386-pc-linux-gnu
$ make
./gen-fac 32 0 >fac_table.h || (rm -f fac_table.h; exit 1)
/opt/bin/bash: line 1: 20507 Segmentation fault (core dumped) ./gen-fac 32
0 > fac_table.h
make: *** [fac_table.h] Error 1
저는 C 프로그래머도 아니고 제 코드도 아니기 때문에 Valgrind를 사용하여 코어를 확인할 가능성은 낮습니다. 나는 라이브러리를 컴파일할 때 이런 상황에 여러 번 있었고 C를 배우는 것은 나에게 우선 순위가 아닙니다. 대안이 있나요?
- C를 배우세요
- 포럼/메일링 리스트에 문의하세요.
내가 액세스할 수 있는 유일한 패키지 관리자는 완전한 GCC보다 적은 기능을 제공하는 ipkg입니다. 가상 머신을 설정하고 ipkg용 바이너리를 빌드하여 DS412에 넣을 수 있습니까? 이전에 이런 일을 해본 적이 없어서 그것이 얼마나 실현 가능한지 전혀 모릅니다.
어떤 도움이나 통찰력이라도 대단히 감사하겠습니다.
답변1
나는 당신이 원하는 것을 할 수 없다고 생각합니다. 이러한 장치 유형의 장치(예: Synology)는 간단한 버전의 도구(예: Bash 등)를 사용하는 경우가 많습니다. 이러한 간단한 버전에는 기능이 없을 수 있습니다. 이는 비표준 위치(예: /opt/bin/bash
.
https://www.synology.com/en-us/products/overview/DS412%2B
직접 빌드하기 전에 OpenSSL이 직접 빌드하는 대신 간단히 업그레이드할 수 있는 바이너리 패키지로 제공되는지 확인하기 위해 해당 웹 사이트나 포럼을 살펴보겠습니다.
답변2
마지막 두줄이 의심스럽네요
$ ./config --prefix=/opt \ --openssldir=/etc/ssl \ --libdir=lib \ shared \ zlib-dynamic
구성된 모든 옵션은 (일반적으로) 로 시작합니다
--
.64비트 - 사용 중인 배포판이 64비트입니까? 프로세서가 64비트인가요? 커널이 64비트 장치에서 실행되고 있습니까? 그런데 64비트 코드와 1GB RAM을 사용해도 별로 이점이 없습니다. 일부 데이터 유형 및 정렬의 크기가 더 크기 때문에 실제로 더 많은 메모리를 소비합니다.
실수
/opt/bin/bash: line 1: 20507 Segmentation fault (core dumped) ./gen-fac 32 0 > fac_table.h
문제가 있는 곳을 제안합니다. 소스 코드를 찾아
gen-fac
디버거에서 실행해 보세요.ipkg install openssl
마지막으로 배포 패키지를 설치하는 데 올바른 구문을 사용할 수 없습니까 ?