FreeBSD 컴퓨터에서 런타임시 libFoundation.so를 찾아야하는 바이너리 "CeeloPartyServer"가 있습니다. 둘 다 같은 디렉토리에 있습니다. 나는 링커 플래그 "-rpath = $ ORIGIN"을 사용하여 (다른 플랫폼에서 크로스 컴파일러를 사용하여) CeeloPartyServer를 컴파일한다.
> readelf -d CeeloPartyServer |grep -i rpath 0x0000000f (RPATH) Library rpath: [$ORIGIN] > ls CeeloPartyServer Contents Foundation.framework libFoundation.so > ./CeeloPartyServer /libexec/ld-elf.so.1: Shared object "libFoundation.so" not found, required by "CeeloPartyServer"
실행하려고하면 왜 라이브러리가 없습니다. 정확한 링커 라인은 -lm -lmysql -rpath = $ ORIGIN입니다. 필자는 readelf 분석이 실제로 라이브러리 rpath가 $ ORIGIN으로 설정되어 있다는 것을 보여주기 때문에 \ $ 등의 것을 벗어날 필요가 없다고 확신합니다. 내가 뭘 놓치고 있니?
귀하의 모든 가정이 올바른지를 제공하는 경우 chrpath와 \ $의 \의 $ 원점을 사용하는 경우. 나는 -z origin 플래그를 사용하지 않고 어디서나 문서화 된 것을 본 적이 없다. 그 문제가 해결되는지 여부를 알려줍니다. – Nektarios