Am 14.07.25 um 12:59 schrieb Stuart Henderson:
On 2025/07/14 10:40, Matthias Andree wrote:
It is conventional for OpenBSD to open bug reports for ports through
sendbug(1) or via bugs@? I skimmed a bit through the ports FAQ and
"Reporting problems" and a few messages randomly picked from the June and
July 2025 ports mailing list archives, and it doesn't look so.
email to ports@ and/or the person listed as maintainer of the relevant port.
The issue is that at least these two ports guys
- databases/lmdb
- databases/sqlite3
link against pthread these days, but their pkg-config file does not list
-lpthread when queried via pkgconfig --libs <database>.
I'd expect
Consequence: bogofilter itself is single-threaded and does not use
material from the POSIX threads library itself, so won't add -pthreads,
-lpthreads or similar. It does use the respective pkg-config file of lmdb
or sqlite3 for --libs and --cflags, and then fails to link any of the
database-related programs constituting bogofilter, because neither
pkg-config --libs lmdb
nor
pkg-config --libs sqlite3
gives me -lpthreads on the output. Excerpt from linker error:
ld: error: undefined symbol: pthread_mutexattr_init
referenced by sqlite3.c:29857
sqlite3.o:(pthreadMutexAlloc) in archive /usr/local/lib/libsqlite3.a
$ pkg-config --libs sqlite3
-L/usr/local/lib -lsqlite3
What I find confusing about this is that there was some effort to fix that
for sqlite3 - and I haven't built the sqlite3 from source but just used
"pkg_add sqlite3" on my OpenBSD 7.7 VM. (Which itself got updated through
several releases by way of sysupgrade followed by syspatch and pkg_add
-u):
https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/databases/sqlite3/Makefile#rev1.134
That was "libs.private" as used for static linking. I wouldn't normally
expect pthread to be listed in "libs" if the .so has a NEEDED pointing
at libpthread as ld.so would normally resolve that itself at runtime.
Hm. I did not intentionally...
ld: error: undefined symbol: pthread_mutexattr_init
referenced by sqlite3.c:29857
sqlite3.o:(pthreadMutexAlloc) in archive /usr/local/lib/libsqlite3.a
switch to linking this statically, so need to find up what in the
autotools macro set chose that over the .so file because that's involved
in either lmdb- or sqlite3-based links.
The intention is of course to use shared libraries for databases where
available so they can update independently for non-breaking bug fixes
without relinking the apps that use either.
Here you're linking the static library, so you need to tell pkg-config
that's what you're doing:
$ pkg-config --libs sqlite3
-L/usr/local/lib -lsqlite3
$ pkg-config --static --libs sqlite3
-L/usr/local/lib -lsqlite3 -lz -lm -lpthread
I don't think there's a problem with the sqlite port, but it looks like
-lpthread is indeed missing from lmdb's libs.private.
Thanks to you and Jeremie for the quick action and Otto for his 2nd pair
of eyeballs.
Best regards,
Matthias