Skip to content

`ld: cannot find... errors on NetBSD #607

@hellium6

Description

@hellium6
$ uname -smr
NetBSD 10.1 amd64
$ git clone --depth 1 https://github.com/orbitalquark/textadept
$ cd textadept
$ git log --oneline
eb8857f (grafted, HEAD -> default, tag: textadept_nightly, origin/default, origin/HEAD) Fixed menu not showing key shortcuts for cut and copy.
$ cmake -S . -B build_dir -D CMAKE_BUILD_TYPE=None \
	-D CMAKE_INSTALL_PREFIX:PATH=/usr/local \
	-D GTK2=OFF -D GTK3=ON -D QT=OFF -D CURSES=OFF
$ cmake --build build_dir -j

It fails with:

...
[ 97%] Built target textadept_gtk
[ 98%] Building C object CMakeFiles/textadept-gtk.dir/src/textadept.c.o
[100%] Linking CXX executable textadept-gtk
ld: cannot find -ldl
ld: cannot find -lgtk-3
ld: cannot find -lgdk-3
ld: cannot find -lpangocairo-1.0
ld: cannot find -lcairo-gobject
ld: cannot find -lgdk_pixbuf-2.0
ld: cannot find -latk-1.0
ld: cannot find -lpango-1.0
ld: cannot find -lcairo
ld: cannot find -lharfbuzz
ld: cannot find -lgio-2.0
ld: cannot find -lgobject-2.0
ld: cannot find -lglib-2.0
gmake[2]: *** [CMakeFiles/textadept-gtk.dir/build.make:110: textadept-gtk] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:341: CMakeFiles/textadept-gtk.dir/all] Error 2
gmake: *** [Makefile:136: all] Error 2

Result is similar with latest release (12.6 atm).

NetBSD pkgin installs packages in /usr/pkg:

$ pkgconf --libs cairo
-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lcairo
$ pkgconf --cflags cairo
-I/usr/pkg/include/cairo -I/usr/pkg/include -I/usr/pkg/include/freetype2 -I/usr/pkg/include/libpng16 -I/usr/X11R7/include -D_REENTRANT -I/usr/pkg/include/pixman-1

/usr/local is empty and open for user installs which I'm using for Textadept.

Workaround

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 95622b8..3598995 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,6 +7,9 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
 if(APPLE)
 	set(CMAKE_OSX_DEPLOYMENT_TARGET 11 CACHE STRING "")
 endif()
+if (CMAKE_HOST_SYSTEM_NAME STREQUAL NetBSD)
+	list(APPEND CMAKE_EXE_LINKER_FLAGS "-L/usr/pkg/lib -Wl,-rpath=/usr/pkg/lib")
+endif()
 
 project(textadept LANGUAGES C CXX)
 
@@ -170,7 +173,7 @@ target_compile_definitions(lua PRIVATE
 	$<IF:$<BOOL:${WIN32}>,LUA_BUILD_AS_DLL,$<IF:$<BOOL:${APPLE}>,LUA_USE_MACOSX,LUA_USE_LINUX>>
 	$<$<CONFIG:Debug>:LUA_USE_APICHECK>)
 # Note: can use "$<$<BOOL:${LINUX}>:dl>" in CMake 3.25.
-target_link_libraries(lua PRIVATE $<$<NOT:$<OR:$<BOOL:${WIN32}>,$<BOOL:${APPLE}>>>:dl>)
+target_link_libraries(lua PRIVATE $<$<NOT:$<OR:$<BOOL:${WIN32}>,$<BOOL:${APPLE}>,$<STREQUAL:$<UPPER_CASE:${CMAKE_SYSTEM_NAME}>,NETBSD>>>:dl>)
 
 # LPeg.
 add_library(lpeg STATIC)

-Wl,-R doesn't work - link completes, but binary doesn't find the libraries.

With these changes build succeeds:

$ cmake --build build_dir -j
...
[ 97%] Built target textadept_gtk
[ 98%] Linking CXX executable textadept-gtk
ld: warning: libintl.so.1, needed by /usr/pkg/lib/libgtk-3.so, may conflict with libintl.so.8
[100%] Built target textadept-gtk
Note on `-Wl,-rpath`

-Wl,-rpath=... like in the patch above works. With -Wl,-R=..., it doesn't work:

$ textadept-gtk 
textadept-gtk: Shared object "libgtk-3.so.0" not found
$ ldd `which textadept-gtk`
/usr/local/bin/textadept-gtk:
	-lgtk-3.0 => not found
	-lgdk-3.0 => not found
	-lpangocairo-1.0.0 => not found
	-lcairo-gobject.2 => not found
	-lgdk_pixbuf-2.0.0 => not found
	-latk-1.0.0 => not found
	-lpango-1.0.0 => not found
	-lcairo.2 => not found
	-lharfbuzz.0 => not found
	-lgio-2.0.0 => not found
	-lgobject-2.0.0 => not found
	-lglib-2.0.0 => not found
	-lintl.8 => not found
	-lstdc++.9 => /usr/lib/libstdc++.so.9
	-lm.0 => /usr/lib/libm.so.0
	-lc.12 => /usr/lib/libc.so.12
	-lgcc_s.1 => /usr/lib/libgcc_s.so.1
	-lpthread.1 => /usr/lib/libpthread.so.1

With -Wl,-rpath:

$ ldd `which textadept-gtk`
/usr/local/bin/textadept-gtk:
	-lgtk-3.0 => /usr/pkg/lib/libgtk-3.so.0
	-lgdk-3.0 => /usr/pkg/lib/libgdk-3.so.0
	-lm.0 => /usr/lib/libm.so.0
	-lc.12 => /usr/lib/libc.so.12
	-lgdk_pixbuf-2.0.0 => /usr/pkg/lib/libgdk_pixbuf-2.0.so.0
	-lglib-2.0.0 => /usr/pkg/lib/libglib-2.0.so.0
	-lintl.1 => /usr/lib/libintl.so.1
	-lpcre2-8.0 => /usr/pkg/lib/libpcre2-8.so.0
	-lpthread.1 => /usr/lib/libpthread.so.1
	-lgobject-2.0.0 => /usr/pkg/lib/libgobject-2.0.so.0
	-lffi.8 => /usr/pkg/lib/libffi.so.8
	-lgmodule-2.0.0 => /usr/pkg/lib/libgmodule-2.0.so.0
	-lgio-2.0.0 => /usr/pkg/lib/libgio-2.0.so.0
	-lz.1 => /usr/pkg/lib/libz.so.1
	-lpng16.16 => /usr/pkg/lib/libpng16.so.16
	-ljpeg.9 => /usr/pkg/lib/libjpeg.so.9
	-lcairo.2 => /usr/pkg/lib/libcairo.so.2
	-lfontconfig.2 => /usr/X11R7/lib/libfontconfig.so.2
	-lexpat.2 => /usr/lib/libexpat.so.2
	-lfreetype.19 => /usr/X11R7/lib/libfreetype.so.19
	-lbz2.1 => /usr/lib/libbz2.so.1
	-lgcc_s.1 => /usr/lib/libgcc_s.so.1
	-lfreetype.6 => /usr/pkg/lib/libfreetype.so.6
	-lbrotlidec.1 => /usr/pkg/lib/libbrotlidec.so.1
	-lbrotlicommon.1 => /usr/pkg/lib/libbrotlicommon.so.1
	-lX11.7 => /usr/X11R7/lib/libX11.so.7
	-lxcb.2 => /usr/X11R7/lib/libxcb.so.2
	-lXau.7 => /usr/X11R7/lib/libXau.so.7
	-lXdmcp.7 => /usr/X11R7/lib/libXdmcp.so.7
	-lXext.7 => /usr/X11R7/lib/libXext.so.7
	-lXrender.2 => /usr/X11R7/lib/libXrender.so.2
	-lxcb-render.0 => /usr/X11R7/lib/libxcb-render.so.0
	-lxcb-shm.0 => /usr/X11R7/lib/libxcb-shm.so.0
	-lpixman-1.0 => /usr/pkg/lib/libpixman-1.so.0
	-lpango-1.0.0 => /usr/pkg/lib/libpango-1.0.so.0
	-lfribidi.0 => /usr/pkg/lib/libfribidi.so.0
	-lharfbuzz.0 => /usr/pkg/lib/libharfbuzz.so.0
	-lgraphite2.3 => /usr/pkg/lib/libgraphite2.so.3
	-lstdc++.9 => /usr/lib/libstdc++.so.9
	-lcairo-gobject.2 => /usr/pkg/lib/libcairo-gobject.so.2
	-lepoxy.0 => /usr/X11R7/lib/libepoxy.so.0
	-lfontconfig.1 => /usr/pkg/lib/libfontconfig.so.1
	-lpangocairo-1.0.0 => /usr/pkg/lib/libpangocairo-1.0.so.0
	-lpangoft2-1.0.0 => /usr/pkg/lib/libpangoft2-1.0.so.0
	-lrt.1 => /usr/lib/librt.so.1
	-lxkbcommon.0 => /usr/pkg/lib/libxkbcommon.so.0
	-lwayland-client.0 => /usr/pkg/lib/libwayland-client.so.0
	-lepoll-shim.0 => /usr/pkg/lib/libepoll-shim.so.0
	-lwayland-cursor.0 => /usr/pkg/lib/libwayland-cursor.so.0
	-lwayland-egl.1 => /usr/pkg/lib/libwayland-egl.so.1
	-lXi.7 => /usr/X11R7/lib/libXi.so.7
	-lXcursor.2 => /usr/X11R7/lib/libXcursor.so.2
	-lXdamage.2 => /usr/X11R7/lib/libXdamage.so.2
	-lXfixes.4 => /usr/X11R7/lib/libXfixes.so.4
	-lXcomposite.2 => /usr/X11R7/lib/libXcomposite.so.2
	-lXrandr.3 => /usr/X11R7/lib/libXrandr.so.3
	-lXinerama.2 => /usr/X11R7/lib/libXinerama.so.2
	-latk-1.0.0 => /usr/pkg/lib/libatk-1.0.so.0
	-latk-bridge-2.0.0 => /usr/pkg/lib/libatk-bridge-2.0.so.0
	-latspi.0 => /usr/pkg/lib/libatspi.so.0
	-ldbus-1.3 => /usr/pkg/lib/libdbus-1.so.3
	-lexecinfo.0 => /usr/lib/libexecinfo.so.0
	-lelf.2 => /usr/lib/libelf.so.2
	-lintl.8 => /usr/pkg/lib/libintl.so.8

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions