ld error (undefined symbol) while compiling sqlite3
- Reply: Yuri : "Re: ld error (undefined symbol) while compiling sqlite3"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 26 Nov 2022 15:10:58 UTC
Hi,
For some reason, I am compiling sqlite3 from the /usr/src/contrib/sqlite3
source using
FreeBSD-14.0-CURRENT-arm64-aarch64-RPI-20221027-769b884e2e2-258837. I
created a /usr/src/usr.bin/sqlite3 directory and created a Makefile file
with content referred to the source.
root@generic:/usr/src/usr.bin/sqlite3 # ls -la
total 16
drwxr-xr-x 2 root wheel 512 Nov 26 12:46 .
drwxr-xr-x 279 root wheel 5120 Nov 26 12:46 ..
-rw-r--r-- 1 root wheel 295 Nov 26 16:50 Makefile
root@generic:/usr/src/usr.bin/sqlite3 # cat Makefile
# $FreeBSD$
.include <src.opts.mk>
SQLITE= ${SRCTOP}/contrib/sqlite3
.PATH: ${SQLITE}
PROG= sqlite3
MK_MAN=no
SRCS= sqlite3.c
INCS= shell.c sqlite3.h
WARNS?= 3
CFLAGS+= -I${SQLITE} \
-DSQLITE_THREADSAFE=0 \
-DSQLITE_OMIT_LOAD_EXTENSION
.include <bsd.prog.mk>
With 'make' command invoked, I encountered this error -> ld: error:
undefined symbol: main as referenced to the crt1_c.c:72
(/usr/src/lib/csu/aarch64/crt1_c.c:72) file. See below details for the
actual error.
root@generic:/usr/src/usr.bin/sqlite3 # make
cc -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=1
-DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -MD -MF.depend.sqlite3.o
-MTsqlite3.o -std=gnu99 -Wno-format-zero-length -fstack-protector-strong
-Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter
-Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized
-Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int
-Wno-unused-const-variable -Wno-error=unused-but-set-variable
-Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality
-Wno-unused-function -Wno-enum-conversion -Wno-unused-local-typedef
-Wno-address-of-packed-member -Qunused-arguments -c
/usr/src/contrib/sqlite3/sqlite3.c -o sqlite3.o
cc -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=1
-DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -std=gnu99
-Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Werror
-Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes
-Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign
-Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable
-Wno-error=unused-but-set-variable -Wno-tautological-compare
-Wno-unused-value -Wno-parentheses-equality -Wno-unused-function
-Wno-enum-conversion -Wno-unused-local-typedef
-Wno-address-of-packed-member -Qunused-arguments -Wl,-zrelro -pie -o
sqlite3.full sqlite3.o -L/usr/obj/usr/src/arm64.aarch64/lib/libthr
-lpthread
ld: error: undefined symbol: main
>>> referenced by crt1_c.c:72 (/usr/src/lib/csu/aarch64/crt1_c.c:72)
>>> /usr/lib/Scrt1.o:(__start)
cc: error: linker command failed with exit code 1 (use -v to see invocation)
*** Error code 1
Stop.
make: stopped in /usr/src/usr.bin/sqlite3
Not sure if I missed something or if something goes wrong with my Makefile
content construction. I basically followed here
https://www.sqlite.org/howtocompile.html and then proved the source to
compile successfully.
root@generic:/usr/src/contrib/sqlite3 # pwd
/usr/src/contrib/sqlite3
root@generic:/usr/src/contrib/sqlite3 # ls -lah
total 11364
drwxr-xr-x 3 root wheel 1.0K Oct 27 08:06 .
drwxr-xr-x 89 root wheel 2.0K Nov 26 13:01 ..
-rw-r--r-- 1 root wheel 15K Oct 27 08:06 INSTALL
-rw-r--r-- 1 root wheel 729B Oct 27 08:06 Makefile.am
-rw-r--r-- 1 root wheel 547B Oct 27 08:06 Makefile.fallback
-rw-r--r-- 1 root wheel 37K Oct 27 08:06 Makefile.in
-rw-r--r-- 1 root wheel 28K Oct 27 08:06 Makefile.msc
-rw-r--r-- 1 root wheel 3.5K Oct 27 08:06 README.txt
-rw-r--r-- 1 root wheel 7.1K Oct 27 08:06 Replace.cs
-rw-r--r-- 1 root wheel 365K Oct 27 08:06 aclocal.m4
-rwxr-xr-x 1 root wheel 7.2K Oct 27 08:06 compile
-rwxr-xr-x 1 root wheel 48K Oct 27 08:06 config.guess
-rwxr-xr-x 1 root wheel 35K Oct 27 08:06 config.sub
-rwxr-xr-x 1 root wheel 485K Oct 27 08:06 configure
-rw-r--r-- 1 root wheel 8.5K Oct 27 08:06 configure.ac
-rwxr-xr-x 1 root wheel 23K Oct 27 08:06 depcomp
-rwxr-xr-x 1 root wheel 15K Oct 27 08:06 install-sh
-rwxr-xr-x 1 root wheel 320K Oct 27 08:06 ltmain.sh
-rwxr-xr-x 1 root wheel 6.7K Oct 27 08:06 missing
-rw-r--r-- 1 root wheel 717K Oct 27 08:06 shell.c
-rw-r--r-- 1 root wheel 8.7K Oct 27 08:06 sqlite3.1
-rw-r--r-- 1 root wheel 8.2M Oct 27 08:06 sqlite3.c
-rw-r--r-- 1 root wheel 599K Oct 27 08:06 sqlite3.h
-rw-r--r-- 1 root wheel 267B Oct 27 08:06 sqlite3.pc.in
-rw-r--r-- 1 root wheel 1.9K Oct 27 08:06 sqlite3.rc
-rw-r--r-- 1 root wheel 36K Oct 27 08:06 sqlite3ext.h
-rw-r--r-- 1 root wheel 78B Oct 27 08:06 sqlite3rc.h
drwxr-xr-x 6 root wheel 512B Oct 27 08:06 tea
root@generic:/usr/src/contrib/sqlite3 # cc -DSQLITE_THREADSAFE=0
-DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c -o sqlite3
So, the above compilation builds the source successfully.
This time I've manually invoked the first compilation command and it works
just fine as seen below.
root@generic:/usr/src/contrib/sqlite3 # cc -O2 -pipe -fno-common
-I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=0
-DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -MD -MF.depend.sqlite3.o
-MTsqlite3.o -std=gnu99 -Wno-format-zero-length -fstack-protector-strong
-Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter
-Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized
-Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int
-Wno-unused-const-variable -Wno-error=unused-but-set-variable
-Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality
-Wno-unused-function -Wno-enum-conversion -Wno-unused-local-typedef
-Wno-address-of-packed-member -Qunused-arguments -c
/usr/src/contrib/sqlite3/sqlite3.c -o sqlite3.o
While the second compilation command below breaks having the same
manifested error.
cc -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=1
-DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -std=gnu99
-Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Werror
-Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes
-Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign
-Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable
-Wno-error=unused-but-set-variable -Wno-tautological-compare
-Wno-unused-value -Wno-parentheses-equality -Wno-unused-function
-Wno-enum-conversion -Wno-unused-local-typedef
-Wno-address-of-packed-member -Qunused-arguments -Wl,-zrelro -pie -o
sqlite3.full sqlite3.o -L/usr/obj/usr/src/arm64.aarch64/lib/libthr
-lpthread
ld: error: undefined symbol: main
>>> referenced by crt1_c.c:72 (/usr/src/lib/csu/aarch64/crt1_c.c:72)
>>> /usr/lib/Scrt1.o:(__start)
cc: error: linker command failed with exit code 1 (use -v to see invocation)
*** Error code 1
Stop.
make: stopped in /usr/src/usr.bin/sqlite3
Any idea of this problem? I posted this at freebsd-database ML however, I'm
thinking that the problem might not be related to SQLite3 perspective as I
have compiled the source without any problem at all so, I share it here.
Thanks and best regards,
Archimedes