1) 일부 해외 라이브러리 (즉, gcrypt
, gpg-error
, z
및 ssh2
)와 연결되는 공유 라이브러리가 포함 된 프로젝트가 있습니다. 그것을 "mylib"라고 부를 수 있습니다. 이 라이브러리는 완벽하게 빌드되어 있으며 libtool
이 종속성을 올바르게 링크하고 있습니다.Autoconf : 맞춤 라이브러리에 링크 링커 오류가 발생했습니다.
libtool: link: ppc-linux-gcc -shared -fPIC -DPIC .libs/mylib1.o .libs/mylib2.o .libs/mylib3.o
-Wl,-rpath -Wl,/opt/ELDK/ppc_8xx/lib -Wl,-rpath \
-Wl,/opt/ELDK/ppc_8xx/lib /opt/ELDK/ppc_8xx/lib/libssh2.so \
-L/opt/ELDK/ppc_8xx/lib -lz /opt/ELDK/ppc_8xx/lib/libgcrypt.so \
/opt/ELDK/ppc_8xx/lib/libgpg-error.so -lpthread -O2 \
-Wl,-soname -Wl,mylib.so.0 -o .libs/mylib.so.0.0.0
2) 동일한 프로젝트에는 "mylib"에 링크되는 여러 프로그램이 있습니다. I 명시 적으로 라이브러리를 검색 configure.ac
은 "MYLIB"에서
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: \
warning: libssh2.so.1, needed by ./../myLib/.libs/mylib.so, not found (try using -rpath or -rpath-link)
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: \
warning: libz.so.1, needed by ./../myLib/.libs/mylib.so, not found (try using -rpath or -rpath-link)
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: \
warning: libgcrypt.so.11, needed by ./../myLib/.libs/mylib.so, not found (try using -rpath or -rpath-link)
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: \
warning: libgpg-error.so.0, needed by ./../myLib/.libs/mylib.so, not found (try using -rpath or -rpath-link)
./../myLib/.libs/mylib.so: undefined reference to `libssh2_channel_process_startup'
./../myLib/.libs/mylib.so: undefined reference to `libssh2_scp_send_ex'
:
AC_SEARCH_LIBS(gpg_err_set_errno,[gpg-error])
AC_SEARCH_LIBS(gcry_check_version,[gcrypt])
AC_SEARCH_LIBS(deflate,[z])
AC_SEARCH_LIBS(libssh2_init,[ssh2])
해야합니다 나는 또한 내가 그들을 연결하려고하면 는하지만, 나는 같은 이전 라이브러리에 대해 링커 오류를 가지고 명시 적으로 "mylib"를 사용하는 모든 프로젝트의 모든 라이브러리를 포함합니까? "mylib"에 처음 연결했을 때 이미 해결되어서는 안됩니까?
더 좋은 방법이 있습니까?
감사합니다.
피씨 : autoconf
와 관련해 매우 현명하지 않습니다. 죄송합니다.
참고 : (아직은 오래된) ELDK 3.1을 사용하여 PowerPC 용으로 크로스 컴파일합니다.
당신이 Makefile.am에서 프로그램에 대한 지침 중 하나를 무시합니까? –
내가 좋아하는 뭔가를'program1_CPPFLAGS = -I $ (top_srcdir) $ (MYLIB_CFLAGS)는''MYLIB_CFLAGS'와'MYLIB_LIBS'는 "프로그램 1"의 configure.ac''에 AC_ARG_WITH''로 정의되는 곳 나를에 연결할 수 있도록 시스템을 설치 한 대신 로컬 "mylib"를 설치하십시오 (이 작업을 수행하는 더 좋은 방법인지 알려주십시오). – j4x
CPPFLAGS는 관련이 없지만 Makefile.am에서 MYLIB_LIBS를 어떻게 사용합니까? 최종 메이크에서 AC_SEARCH_LIBS 지정된 라이브러리를 찾는 데 성공하면 라이브러리를 포함해야하는 (LIBS) 거기에 $ (LINK) 명령이 포함 된 프로그램 1의 $ (EXEEXT)의 대상이되어야한다, 그리고 그 명령은 $이 있어야합니다. 난 당신이 크로스 컴파일을있을 때 수행하는 것입니다 얼마나 쉬운 모르겠어요하지만 –