2011-07-27 3 views
0

코드에서 regcomp() 함수를 사용하고 있습니다. 내 코드는 libonig.so뿐만 아니라 libc.so.6과 연결되어있다. 이 두 라이브러리에는 regcomp()에 대한 고유 한 구현이 있지만 libonig.so의 구현을 사용하려고합니다. 그러나, 내 코드는 항상 libc.so.6에서 구현을 사용합니다. 다음과 같이 LDD의 출력은 -링크 오류 - 다른 공유 라이브러리의 동일한 기호

LDD

linux-vdso.so.1 => (0x00007fffa03ff000) 
    libonig.so.2 => /usr/local/lib/libonig.so.2 (0x00007f5cb2fbf000) 
    libstdc++.so.6 => /usr/local/lib64/libstdc++.so.6 (0x00007f12a43cf000) 
    libm.so.6 => /lib64/libm.so.6 (0x00007f12a414c000) 
    libgcc_s.so.1 => /usr/local/lib64/libgcc_s.so.1 (0x00007f12a3f36000) 
    libc.so.6 => /lib64/libc.so.6 (0x00007f12a3be1000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000003421c00000) 

libtest.so 나는 libonig.so 또는 libc.so.6으로의 수정을 허가하고 있지 않다. libcomig.so에서 regcomp()를 사용해야한다는 링커를 지정하는 방법이 있습니까?

답변

0

방금이 문제가 해결되었습니다. 실제로 공유 객체 (libtest.so)를로드하기 위해 dlopen()을 사용하고있었습니다. 그래서 나는 libtest.so를로드하는 바이너리에 libonig.so를 연결시켜야했다.

반면에 libotig.so를 libtest.so에 연결하려고했습니다. 그러나 바이너리가 실행될 때 libc.so.6에서 regcomp() 버전을 얻었으므로 libonig.so를 사용하여 심볼을 해결할 필요가 없다고 생각했습니다. libonig.so를 링크하고 LD_LIBRARY_PATH에 경로를 포함하면 문제가 해결되었습니다.

관련 문제