2011-08-08 3 views
0

나는 다중 플랫폼 C 프로그램을 연구 중이다. makefile은 각 기계의 모든 다른 컴파일러, 라이브러리 위치 등으로 인해 매우 복잡해졌습니다. Autoconf/Automake은 좋은 솔루션이 될 것이라고 생각했지만, 이전 도구를 사용한 경험은 미미했습니다.automake와 링크하기 위해 정말로 라이브러리 위치를 지정해야합니까?

Makefile.am의 줄은 LIBS=-lX11이지만 연결은 오류 "/usr/bin/ld: cannot find -lX11"과 함께 실패합니다. 나는 LIBS의 정의에 "-L/usr/X11R6/lib/"을 추가하여이 문제를 해결할 수 있지만 실제로 그렇게해야합니까? 내가 ./configure를 실행하면 말한다 : Automake가이 곳을 찾을 수 알아야처럼

checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include

그래서 보인다. X11 libs은 각 컴퓨터의 다른 위치에 있기 때문에 하드 코드하지 않고 Makefile.am에 위치를 참조 할 수있는 방법이 있습니까?

답변

1

당신의 Makefile.am은 LIBS를 설정하면 안됩니다. 라이브러리와 링크해야하는 경우 configure.ac은 라이브러리 검사를 포함해야하며 configure 스크립트는 그에 따라 LIBS를 설정합니다. 또한, Makefile.am은 라이브러리에 대한 경로를 지정하지 않아야합니다. 프리 컴파일러가 헤더를 찾고 링커가 라이브러리를 찾을 수 있도록 각 시스템을 구성해야합니다. 링커가 라이브러리를 찾을 수 있도록 시스템이 설정되지 않은 경우, 올바른 해결책은 사용자가 Makefile.am에서 무언가를 하드 코딩하지 않고 LDFLAGS에서 위치를 지정하는 것입니다. (예를 들어, Makefile에 -L/p/a/t/h를 추가하는 대신, LDFLAGS = -L/p/a/t/h를 configure 호출에 추가해야합니다.)

+0

힌트를 보내 주셔서 감사합니다. 나는 AC_CHECK_LIB (X11, XOpenDisplay)를 거기에 넣었지만, 컴파일되지 않을 때, 나는 changings LIBS에 의해 그것을 고치려고했다. ./configure가 X11 라이브러리에서 XOpenDisplay 함수를 찾을 수 없다는 것을 간과 한 것으로 나타났습니다. 아마도 여기에서 진짜 문제 일 것입니다. – Tom

관련 문제