nakka soft world !

[IT] Bitbake not found (try using -rpath or -rpath-link) 에러 본문

프로그래밍언어/C++

[IT] Bitbake not found (try using -rpath or -rpath-link) 에러

nakka 2021. 3. 31. 17:47
728x90

Bitbake를 사용해서 build 를 하는데, custom된 library를 적용해서 개발 할일이 생겼다.

이전에 사용하던 make나, cmake 정도로 생각하고, 뭐 그쯤이야 했으나.

이런

예상치도 못한 곳에서 뻥 뻥 터지고야 말았다.

심지어 아래와 같은 Log를 뿜으며 빌드도 되지 않는 상황.

| Invoking: GCC C++ Linker
| aarch64-poky-linux-g++  -fstack-protector-strong  -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot -L../../HFWK/Lib -L../../DLT/deploy/lib -o "ManagerXXX"  ./CSocketThread.o  ./CPipeThread.o ./ClientSock.o 
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: warning: libgio-2.0.so.0, needed by ../../HFWK/Lib/libgee_api.so, not found (try using -rpath or -rpath-link)
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: warning: libgobject-2.0.so.0, needed by ../../HFWK/Lib/libgee_api.so, not found (try using -rpath or -rpath-link)
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: warning: libglib-2.0.so.0, needed by ../../HFWK/Lib/libgee_api.so, not found (try using -rpath or -rpath-link)
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: ../../HFWK/Lib/libgee_api.so: undefined reference to `g_bus_get_sync'
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: ../../HFWK/Lib/libgee_api.so: undefined reference to `g_variant_new'
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: ../../HFWK/Lib/libgee_api.so: undefined reference to `g_dbus_proxy_call_sync'
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: ../../HFWK/Lib/libgee_api.so: undefined reference to `g_variant_get'
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: ../../HFWK/Lib/libgee_api.so: undefined reference to `g_assertion_message_error'
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: ../../HFWK/Lib/libgee_api.so: undefined reference to `g_variant_unref'
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: ../../HFWK/Lib/libgee_api.so: undefined reference to `g_dbus_proxy_new_sync'
| /work/project/tmp/aarch64-poky-linux/managerxxx/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-poky-linux/../../libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/8.2.0/ld: ../../HFWK/Lib/libgee_api.so: undefined reference to `g_object_unref'
| collect2: error: ld returned 1 exit status
| makefile:78: recipe for target 'ManagerXXX' failed
| make: *** [ManagerXXX] Error 1

 

피나는 구글링으로 해결 방법이란 방법은 모두 뒤져서 적용 해봤으나 도통 먹질 않는다.

우선 "try using -rpath or -rpath-link" 라는 Comment 가 있어 이를 위해서 아래와 같이 LD Flag에  script를 추가 했다.

#===== LDFLAGS - add the flags to the linker command line.
LDFLAGS+=-lang-c++ -Wl,-E -M -Wl,-rpath=libgio-2.0.so.0

이렇게 해서 해결이 되었다면 이 포스팅은 없었을 것 이다.

어떻게 해야 하지, 혹자는 export하라는데, 이건 내가 원하는 방향이 아니다.

그러면 어떻게? 음... 잘모르겠다. Library 배포자에게 문의 했다.

 

아래를 추가 하란다.

CFLAGS += -pthread -lgio-2.0 -lgobject-2.0 -lglib-2.0

또는 아래와 같이 pkg-config 를 이용해도 된단다.

CFLAGS += $(shell pkg-config --libs --cflags gio-2.0 gio-unix-2.0 glib-2.0)

음.... 역시 안된다. make로 하면 될 것 같은데, bitbake로 해야 해서 안되는 것 같다.

팀 내부로 메일을 돌렸다.

누군가 회신이 왔다.

DEPENDS에 library 추가 하고, install에 install위치 추가 하란다.

읭? 지푸라기라도 잡아야 한다. 해보자.

아래 두개를 추가 했다.

DEPENDS = "glib-2.0"
do_install () {
	install -d ${D}${libdir}
	install -m 0755 ${S}/HFWK/LIB/*.so ${D}${libdir}
}

FILES_${PN} += "${libdir}/*"

 

오 유레카~!!! 

성공이다.

NOTE: Tasks Summary: Attempted 1668 tasks of which 1658 didn't need to be rerun and all succeeded.
NOTE: Writing buildhistory

Summary: There were 2 WARNING messages shown.

 

이 자리를 빌어 도와준 동료에게 감사 한다.

혹시나 나와 같은 문제를 겪고 있는 사람이 있을까해서 포스팅을 남긴다.

이런건 영어로 써야 하는데....

728x90
Comments