0

공유 라이브러리 용 테스트 프로그램을 빌드하는 데 사용하려고하는 Autogen Makefile.am이 있습니다. 테스트 바이너리를 빌드하기 위해 타겟으로 공유 라이브러리를 계속 만들고 싶지만 테스트 프로그램을 정적으로 연결하고 싶습니다. 지난 몇 시간 동안이 작업을 수행하기 위해 Makefile.am을 만들려고 노력했습니다.공유 라이브러리를 만들지 만 정적 하나에 연결하기

  • 내가 명시 적으로 도서관의 운영자와 버전을 사용하고 난이 라이브러리가 내장되어지고 볼 수 있지만 오류를 발견하지 않는 파일을 얻을 수있는 LDADD 라인을 변경 시도했습니다.

  • LDFLAGS를 통해 링크 경로에 .libs 디렉토리를 추가하려고 시도했지만 여전히 찾을 수 없습니다.

  • 실행 소스 파일을 정적 라이브러리의 빌드 파일과 다르게 빌드하기 때문에 라이브러리 소스를 내 테스트 소스 목록으로 이동하려고 시도했지만 작동하지 않습니다.

  • 나는 심지어 .A 버전 (그래서 lib_LTLIBRARIES과 lib_LIBRARIES 모두있다)에 대한 lib_LIBRARIES 항목을 복제 해 정적 버전의 일부로서 공유 버전에 대한 모든 LDFLAGS, 소스 디렉토리와 헤더를 복제 시도 (교체 _a_SOURCES의 =의 _la_SOURCES은. 여전히 그 때문에 작동하지 않는 형태의 지금은 구축 무엇을 알아낼 수 없습니다.

  • 제공해야합니다 기본 LT_INIT을 사용하고 내 configure.ac 파일 나 정적 및 동적 라이브러리 모두 libtool .a 파일을 볼 수없는 경우에도 나는 그것을 모두 apprently 건물입니다.

누구나이 방법을 알고 계십니까?

+0

'prog_LDFLAGS = -static' –

+0

감사합니다! 그게 효과가 있었어! LDADD 라이브러리를 .la 형식 (공유)으로 유지하지만 LDFLAGS에서 정적 라이브러리를 강제 실행하면 실제로 라이브러리에 정적 링크가 강제로 적용됩니다! 감사합니다. 감사합니다. – TimeHorse

+0

.la는 반드시 공유 라이브러리 일 필요는 없습니다. 사실은 라이브러리의 정적 _and_ 공유 버전의 위치와 몇 가지 다른 정보가 들어있는 텍스트 파일입니다. – ptomato

답변

0

@Brett Hale이 자신의 의견에서 언급했듯이 Makefile.am에 프로그램을 정적으로 연결하려고한다고 말해야합니다.

LDFLAGS-static을 추가해야합니다.
특정 이진수에 대해 LDFLAGS을 변경하면 binary_LDFLAGS (여기서 이진은 빌드 할 이진 파일의 이름입니다)을 변경하면됩니다.

때문에이 같은 트릭을 수행해야합니다

binary_LDFLAGS = $(AM_LDFLAGS) -static 
관련 문제