GNU C 컴파일러가 잘못된 아키텍처 이름을 링커에 전달합니다. 예를 들어 gcc helloworld.i
오류가 발생합니다 ld: unknown/unsupported architecture name: -arch arm
. LD로 몇 가지 실험을 해본 결과 이것이 armv7
내가 사용해야 할 아키텍처인 것 같습니다. 컴파일 및 어셈블리 작업이 제대로 작동하는 것 같습니다.
컴파일러 컬렉션(iphone-gcc)은 CC 도구 컬렉션 외부에 독립 실행형 설치로 제공한 최신 LD64가 아니라 오픈 소스 Darwin CC 도구를 통해 제공되는 이전 버전의 링커와 작동하도록 설계된 것으로 보입니다. .링커에 다른 아키텍처를 전달하도록 GCC에 지시하는 방법이 있습니까?-Wl,-arch,armv7
또는 GCC로 전달하면 -Xlinker -arch -Xlinker armv7
동일한 오류가 발생합니다.
답변1
툴체인을 단편적으로 업그레이드해서는 안 됩니다. 이러한 부분은 함께 작동해야 합니다. GNU 도구는 다양한 변형을 허용하므로 특히 다음과 같은 작업을 위해 다양한 부분이 함께 작동하도록 설정해야 합니다.크로스 컴파일러.
어떤 이유로든 최신 버전이 필요한 경우 ld
이를 지원하는 완전한 툴체인을 구축해야 합니다.
답변2
@Warren Young의 조언을 듣고 링커 대신 나머지 툴체인을 업그레이드하십시오.
ARM 기반 Darwin 9 이상의 경우,CoolStar 툴체인BigBoss 저장소에서 가져오는 것이 좋습니다. 툴체인에는 오래된 iphone-gcc와 LD64 및 최신 Darwin CC Tools를 대체하는 LLVM+Clang이 포함되어 있습니다. 바라보다아이폰 개발 위키(약간 구식임) iphone-gcc와 LLVM+Clang을 더 자세히 비교하려면 다음을 참조하세요.
답변3
EasyBuild 도구를 사용하면 여러 도구 체인을 자동으로 제공할 수 있습니다.
https://hpc.uni.lu/users/software/#sw-toolchain
FI. ClangGCC 살펴보기
spec strings
이제 GCC에는 다른 프로그램과 작동하는 방식을 지정하는 시스템이 있습니다 .http://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
귀하의 임무는 작업이 완료되면 이를 필요에 맞게 조정하고 문서화하거나 다른 사람들이 신뢰할 수 있는 EasyBuild 도구 체인을 만드는 것입니다.