정적 Mac OS XC 빌드 생성
Mac OS X에서 .c 파일의 정적 빌드를 만들려면 어떻게 해야 합니까?
gcc -o test Main.c -static
이해합니다.
ld: library not found for -lcrt0.o
collect2: ld returned 1 exit status
Mac OS X의 gcc에서는 지원되지 않습니다.
http://discussions.apple.com/message.jspa?messageID=11053384
아마도 "-정적" 플래그 플랫아웃은 MacOS X에서 작동하지 않을 것입니다. gcc의 모든 기능이 MacOS X에서 구현되는 것은 아닙니다. Apple은 향후 버전의 OS에서도 gcc를 사용하지 않을 것입니다.
"-static"을 사용하여 연결하는 방법을 모르겠습니다.MacOSX에서 그렇게 해야 할 이유가 없습니다.당신이 "-static"을 사용하려는 이유를 안다면 저는 그 문제에 더 관심이 있을 것입니다.지금은 이해가 안 돼요도움을 요청하는 것은 기본적으로 프로젝트에 대한 협력자를 요청하는 것입니다. 단 10분만 프로젝트에 참여해도 됩니다.당신은 나에게 관심을 가질 필요가 있습니다.
그리고 http://developer.apple.com/library/mac/ #qa/qa2001/qa1118.html
Mac OS X에서는 사용자 바이너리의 정적 연결이 지원되지 않습니다.사용자 바이너리를 Mac OS X 라이브러리 및 인터페이스의 내부 구현에 연결하면 Mac OS X를 업데이트하고 향상시키는 기능이 제한됩니다. 대신 동적 연결이 지원됩니다(예: crt0.o를 찾는 대신 자동으로 crt1.o에 연결).
정적 연결의 한계를 매우 신중하게 고려하고, 고객과 고객의 요구, 그리고 제공해야 할 장기적인 지원을 고려할 것을 강력히 권장합니다.
업데이트: 금지된 이진이 정적 이진입니다.그러나 일부 정적 라이브러리를 컴파일하여 다른 프로그램과 함께 사용할 수 있습니다.프로그램은 라이브러리와 정적으로 연결되지만 libc와 같은 다른 라이브러리는 동적이므로 프로그램은 동적 실행 파일이 됩니다.
동적으로 로드된 라이브러리가 없는 이진은 OSX에서 빌드할 수 없습니다.저는 apple llvm-gcc와 macports gcc를 모두 시도했습니다.하지만 지금까지 언급된 답은 이것이 필요하지 않다는 것입니다.c/c++ 라이브러리를 정적으로 연결할 수 있습니다(동적인 부분과 함께 사용).
파일 hello.cpp:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!";
}
평소와 같이 컴파일:
g++ hello.cpp -o hello
연결 확인:
otool -L hello
hello:
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
libSystem을 제거할 수 없습니다.B.dylib 종속성이지만 macports gcc를 사용하면 다음을 수행할 수 있습니다.
g++-mp-4.6 -static-libgcc -static-libstdc++ hello.cpp -o hello
otool -L hello
hello:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
애플만 정적 링크를 지원하지 않는 것 같습니다.
llvm-g++ -static-libgcc -static-libstdc++ hello.cpp -o hello
otool -L hello
hello:
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
일부 기능을 라이브러리로 변환하고 싶다고 상상해 보십시오.
파일: example.c
#include <stdio.h>
void aFunction( int a )
{
printf( "%d\n", a );
}
파일: example.h
void aFunction( int a );
파일: main.c
#include "example.h"
int main( )
{
aFunction( 3 );
return 0;
}
라이브러리를 만드는 방법
gcc -c example.c
ar -r libmylibrary.a example.o
라이브러리 연결하기
gcc main.c -lmylibrary -L. -I.
그리고 example.c 파일은 전체 프로그램의 정적 빌드입니다.
언급URL : https://stackoverflow.com/questions/5259249/creating-static-mac-os-x-c-build
'programing' 카테고리의 다른 글
Are Spring objects thread safe? (0) | 2023.08.10 |
---|---|
PowerShell에서 동적으로 변수 생성 (0) | 2023.08.10 |
'Entries' 속성이 'ObjectConstructor' 유형에 없습니다. (0) | 2023.08.10 |
JQuery UI 대화 상자의 내용에 맞게 자동으로 확장 또는 축소 (0) | 2023.08.10 |
APN Device Token은 각 앱마다 고유합니까? (0) | 2023.08.10 |