rtspplayer demo 프로그램이 핸드폰에서 실행되는 것을 보면 gcc의-rpath,-rpath-link 두 가지 옵션이 있습니다.
6721 단어 option
No such element ...... `fbsink'
이상하게도 휴대전화에서alp-gst-inspect|grep'fbsink'를 사용하는데 이 요소를 찾을 수 있다.나중에야 비로소 fbsink라는 요소가/opt/alp/lib/libalp 에 존재한다는 것을 알게 되었다media.so 파일에서이거는.so 파일은 rtspplayer 실행기 동적 링크 라이브러리의 검색 범위 안에 있지 않기 때문에 fbsink 생성이 실패했습니다.
libalpmedia.so 이 파일은 rtspplayer 실행 기간의 동적 링크 라이브러리 검색 범위에 존재합니까?간단합니다. 컴파일할 때 - L/opt/alp/lib -lalp 를 추가합니다.미디어를 이용하면 됩니다.코드가 이걸 현저하게 호출하지는 않았지만.so의 함수입니다. 하지만 우리가 컴파일할 때 수동으로 이것을 사용합니다.so는dependency로 연결되어 있습니다. 이렇게 하면 OK입니다.그러나 이러한 내용을 더하면 컴파일에 오류가 발생합니다.
gcc -Wall -g -o rtspplayer `pkg-config --cflags --libs gtk+-2.0` -I/usr/include/gstreamer-0.10 -L/opt/alp/lib -lGSTfusion -lalp_media main.c gstplay.c gstplay-marshal.c
/scratchbox/compilers/arm-linux-gnueabi/bin/../lib/gcc/arm-none-linux-gnueabi/4.1.2/http://www.cnblogs.com/http://www.cnblogs.com/arm-none-linux-gnueabi/bin/ld: warning: libalp_audiomgr.so, needed by/opt/alp/lib/libalp_media.so, not found (try using -rpath or -rpath-link)
/scratchbox/compilers/arm-linux-gnueabi/bin/../lib/gcc/arm-none-linux-gnueabi/4.1.2/http://www.cnblogs.com/http://www.cnblogs.com/arm-none-linux-gnueabi/bin/ld: warning: libalp_gstaudiomgrsrc.so, needed by/opt/alp/lib/libalp_media.so, not found (try using -rpath or -rpath-link)
/scratchbox/compilers/arm-linux-gnueabi/bin/../lib/gcc/arm-none-linux-gnueabi/4.1.2/http://www.cnblogs.com/http://www.cnblogs.com/arm-none-linux-gnueabi/bin/ld: warning: libalp_gstaudiomgrsink.so, needed by/opt/alp/lib/libalp_media.so, not found (try using -rpath or -rpath-link)
/scratchbox/compilers/arm-linux-gnueabi/bin/../lib/gcc/arm-none-linux-gnueabi/4.1.2/http://www.cnblogs.com/http://www.cnblogs.com/arm-none-linux-gnueabi/bin/ld: warning: libalp_core.so, needed by/opt/alp/lib/libalp_media.so, not found (try using -rpath or -rpath-link)
/scratchbox/compilers/arm-linux-gnueabi/bin/../lib/gcc/arm-none-linux-gnueabi/4.1.2/http://www.cnblogs.com/http://www.cnblogs.com/arm-none-linux-gnueabi/bin/ld: warning: libalp_sysutils.so, needed by/opt/alp/lib/libalp_media.so, not found (try using -rpath or -rpath-link)
/scratchbox/compilers/arm-linux-gnueabi/bin/../lib/gcc/arm-none-linux-gnueabi/4.1.2/http://www.cnblogs.com/http://www.cnblogs.com/arm-none-linux-gnueabi/bin/ld: warning: libalp_drm1.so, needed by/opt/alp/lib/libalp_media.so, not found (try using -rpath or -rpath-link)
/opt/alp/lib/libalp_media.so: undefined reference to `alp_drm_fclose'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_ipc_message_get_message_ID'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_settings_open'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_ipc_message_unpack_start'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_log'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_settings_close'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_drm_is_drm_file'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_settings_init'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_drm_fseek'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_drm_fopen_with_permission'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_settings_get'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_ipc_connection_register_disconnect_callback'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_ipc_message_unpack_end'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_ipc_channel_connect'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_ipc_connection_register_receive_callback'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_drm_check_rights_info'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_ipc_message_unpack_int32'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_drm_ftell'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_settings_value_clean'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_ipc_message_unpack_string'
/opt/alp/lib/libalp_media.so: undefined reference to `alp_drm_fread'
collect2: ld returned 1 exit status
make: *** [rtspplayer] Error 1
이 오류 보고서는libalp를 찾을 수 없음gstaudiomgrsrc.so 등 한 무더기의 so 파일, 이 so 파일들은 모두/opt/alp/lib 디렉터리에 위치하고 그들은libalpmedia.소에게 필요한 것.다시 말하면libalpmedia.so에 필요한 동적 링크 라이브러리가 있습니다.
이런 상황에서 -rpath, -rpath-link 두 가지 옵션이 생겨났다.사실 우리가 이렇게 큰 힘을 들인 것은libalp 를media.so 이것은 rtspplayer의 동적 링크 라이브러리 찾기 목록에 추가됩니다. 형상적으로 말하면 명령ldd를 사용합니다./rtspplayer에서 libalp 보이기media.so 이 줄.
-rpath/-rpath-link는 사실 모두ld의 옵션이지 gcc가 아니다.gcc는 단지 wrapper일 뿐,preprocessor,assemble,link 세 가지를 결합시켰다.-rpath
-rpath-link는 -rpath와 유사하지만 -rpath-link
이 두 옵션의 의미를 분명히 한 후에 용법을 보면 gcc의 명령줄에서 이 두 옵션을 직접 사용하려면 반드시 문법에 따라야 한다. - Wl,......예: -Wl, -rpath-link/opt/alp/lib.Wl은 gcc에게 다음 내용은 링크에게 전달되는 옵션이라고 알려준다.ld를 직접 사용하면 -Wl이 필요 없어요.그래서 위에서 우리의 컴파일 명령은 이렇게 되어 OK가 되었다.
gcc -Wall -g -o rtspplayer -Wl,--rpath-link/opt/alp/lib `pkg-config --cflags --libs gtk+-2.0` -I/usr/include/gstreamer-0.10 -L/opt/alp/lib -lGSTfusion -lalp_media main.c gstplay.c gstplay-marshal.c
이렇게 하면 생성된 rtspplayer를 다시 휴대전화에 복사하면 실행할 수 있으며 fbsink 요소를 찾을 수 없다는 것을 다시 말하지 않을 것이다.
이것은 gcc 명령줄에서 assembler,preprocessor,linker 전달 옵션에 대한 구체적인 키워드 목록입니다.
Code:
Select all
-Wa,<options> Pass comma-separated <options> on to the assembler
-Wp,<options> Pass comma-separated <options> on to the preprocessor
-Wl,<options> Pass comma-separated <options> on to the linker
또한 LD 정의LIBRARY_PATH도 가능합니다.이렇게 하면 -Wl, -rpath-link/opt/alp/lib을 넣지 않아도 됩니다.구체적인ld가 동적 링크 라이브러리의 논리를 어떻게 찾는지는 manld에서 -rpath,-rpath-link 두 부분에 대한 상세한 설명을 보십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
map이란 무엇인가map은 어떤 함수를 받아서 순회할 수 있는 것에 그 함수를 적용하여 새로운 순회 가능한 것을 돌려준다. 함수의 인자를 한 번에 다 받는 게 아니라, 여러 인자들로 나누어 받는 기법인 currying이 적용된 함수와...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.