Cogmasters/concord

Unable to link concord static library to a shared library.

nephatrine opened this issue · 7 comments

Describe the bug

I am receiving the following errors when linking libdiscord.a to a shared library.

/usr/bin/ld: concord-prefix/lib/libdiscord.a(discord-worker.o): warning: relocation against `g_tpool' in read-only section `.text'
/usr/bin/ld: concord-prefix/lib/libdiscord.a(user-agent.o): relocation R_X86_64_PC32 against symbol `L' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value

Expected behavior

My personal preference would be that static libraries use -fPIC by default so they can be linked into either executables or shared libraries. Barring that, I think it would be perfectly fine though to just maybe have a simple mention in the README.md build instructions that you might need to run CLFLAGS="-fPIC" make if linking into a shared library. Alternatively a separate static_pic target could be added to the makefile, but I think that might be overkill when its easy enough to add to the CFLAGS as long as you know that's what you need to do.

To Reproduce

  • Clone fresh copy of repository.
  • Execute make or make static.
  • Compile a separate shared library (.so) and link to the generated libdiscord.a.

Version

This occurs on both master and dev branches.

commit 072e414 (HEAD -> master, origin/master, origin/HEAD)
commit d703210 (HEAD -> dev, origin/dev)

Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy

This sounds like a good idea to have it user-selectable and mentioned in the README. I will get all of this thrown in in a couple of hours.

I'll just drop a note in the README telling users how to do it the manual way: CFLAGS="-fpic" make

Is there something else required for this to work now?

For one, both the OP of this issue and gcc said to use -fPIC, not -fpic, so seems like the README has a typo.

Secondly, CFLAGS="-fPIC" make does mostly work, but there seem to be a few files that potentially aren't getting these flags as make shared still fails. I tried adding -fPIC to the gencodecs Makefile on that off chance, but it still fails with the same error:

root@debian11:/usr/src/concord# make clean
make[1]: Entering directory '/usr/src/concord/src'
make[2]: Entering directory '/usr/src/concord/core'
make[2]: Leaving directory '/usr/src/concord/core'
make[1]: Leaving directory '/usr/src/concord/src'
make[1]: Entering directory '/usr/src/concord/test'
make[1]: Leaving directory '/usr/src/concord/test'
make[1]: Entering directory '/usr/src/concord/examples'
make[1]: Leaving directory '/usr/src/concord/examples'
root@debian11:/usr/src/concord# CFLAGS="-fPIC" make
make[1]: Entering directory '/usr/src/concord/core'
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o cog-utils.o cog-utils.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o io_poller.o io_poller.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o user-agent.o user-agent.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o websockets.o websockets.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o curl-websocket.o curl-websocket.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o jsmn-find.o jsmn-find.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o json-build.o json-build.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o log.o log.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o logconf.o logconf.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o priority_queue.o priority_queue.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o anomap.o anomap.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o sha1.o sha1.c
cc -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o threadpool.o threadpool.c
make[1]: Leaving directory '/usr/src/concord/core'
make[1]: Entering directory '/usr/src/concord/gencodecs'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/usr/src/concord/gencodecs'
make[1]: Entering directory '/usr/src/concord/src'
make[2]: Entering directory '/usr/src/concord/core'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/usr/src/concord/core'
make[2]: Entering directory '/usr/src/concord/gencodecs'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/usr/src/concord/gencodecs'
make[2]: Entering directory '/usr/src/concord/src'
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o concord-once.o concord-once.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-refcount.o discord-refcount.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-rest.o discord-rest.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-rest_request.o discord-rest_request.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-rest_ratelimit.o discord-rest_ratelimit.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-client.o discord-client.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-events.o discord-events.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-cache.o discord-cache.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-loop.o discord-loop.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-gateway.o discord-gateway.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-gateway_dispatch.o discord-gateway_dispatch.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-messagecommands.o discord-messagecommands.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-timer.o discord-timer.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-misc.o discord-misc.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-worker.o discord-worker.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o application_command.o application_command.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o auto_moderation.o auto_moderation.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o interaction.o interaction.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o audit_log.o audit_log.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o channel.o channel.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o emoji.o emoji.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o gateway.o gateway.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o guild.o guild.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o guild_scheduled_event.o guild_scheduled_event.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o guild_template.o guild_template.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o invite.o invite.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o oauth2.o oauth2.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o user.o user.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o voice.o voice.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o webhook.o webhook.c
make[2]: Leaving directory '/usr/src/concord/src'
ar -cqsv ../lib/libdiscord.a concord-once.o discord-refcount.o discord-rest.o discord-rest_request.o discord-rest_ratelimit.o discord-client.o discord-events.o discord-cache.o discord-loop.o discord-gateway.o discord-gateway_dispatch.o discord-messagecommands.o discord-timer.o discord-misc.o discord-worker.o application_command.o auto_moderation.o interaction.o audit_log.o channel.o emoji.o gateway.o guild.o guild_scheduled_event.o guild_template.o invite.o oauth2.o user.o voice.o webhook.o ../gencodecs/discord_codecs.o ../core/cog-utils.o ../core/io_poller.o ../core/user-agent.o ../core/websockets.o ../core/curl-websocket.o ../core/jsmn-find.o ../core/json-build.o ../core/log.o ../core/logconf.o ../core/priority_queue.o ../core/anomap.o ../core/sha1.o ../core/threadpool.o
a - concord-once.o
a - discord-refcount.o
a - discord-rest.o
a - discord-rest_request.o
a - discord-rest_ratelimit.o
a - discord-client.o
a - discord-events.o
a - discord-cache.o
a - discord-loop.o
a - discord-gateway.o
a - discord-gateway_dispatch.o
a - discord-messagecommands.o
a - discord-timer.o
a - discord-misc.o
a - discord-worker.o
a - application_command.o
a - auto_moderation.o
a - interaction.o
a - audit_log.o
a - channel.o
a - emoji.o
a - gateway.o
a - guild.o
a - guild_scheduled_event.o
a - guild_template.o
a - invite.o
a - oauth2.o
a - user.o
a - voice.o
a - webhook.o
a - ../gencodecs/discord_codecs.o
a - ../core/cog-utils.o
a - ../core/io_poller.o
a - ../core/user-agent.o
a - ../core/websockets.o
a - ../core/curl-websocket.o
a - ../core/jsmn-find.o
a - ../core/json-build.o
a - ../core/log.o
a - ../core/logconf.o
a - ../core/priority_queue.o
a - ../core/anomap.o
a - ../core/sha1.o
a - ../core/threadpool.o
make[1]: Leaving directory '/usr/src/concord/src'
root@debian11:/usr/src/concord# CFLAGS="-fPIC" make shared
make[1]: Entering directory '/usr/src/concord/core'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/usr/src/concord/core'
make[1]: Entering directory '/usr/src/concord/gencodecs'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/usr/src/concord/gencodecs'
make[1]: Entering directory '/usr/src/concord/src'
make[2]: Entering directory '/usr/src/concord/src'
make[3]: Entering directory '/usr/src/concord/core'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/usr/src/concord/core'
make[3]: Entering directory '/usr/src/concord/gencodecs'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/usr/src/concord/gencodecs'
make[3]: Entering directory '/usr/src/concord/src'
make[3]: 'concord-once.o' is up to date.
make[3]: 'discord-refcount.o' is up to date.
make[3]: 'discord-rest.o' is up to date.
make[3]: 'discord-rest_request.o' is up to date.
make[3]: 'discord-rest_ratelimit.o' is up to date.
make[3]: 'discord-client.o' is up to date.
make[3]: 'discord-events.o' is up to date.
make[3]: 'discord-cache.o' is up to date.
make[3]: 'discord-loop.o' is up to date.
make[3]: 'discord-gateway.o' is up to date.
make[3]: 'discord-gateway_dispatch.o' is up to date.
make[3]: 'discord-messagecommands.o' is up to date.
make[3]: 'discord-timer.o' is up to date.
make[3]: 'discord-misc.o' is up to date.
make[3]: 'discord-worker.o' is up to date.
make[3]: 'application_command.o' is up to date.
make[3]: 'auto_moderation.o' is up to date.
make[3]: 'interaction.o' is up to date.
make[3]: 'audit_log.o' is up to date.
make[3]: 'channel.o' is up to date.
make[3]: 'emoji.o' is up to date.
make[3]: 'gateway.o' is up to date.
make[3]: 'guild.o' is up to date.
make[3]: 'guild_scheduled_event.o' is up to date.
make[3]: 'guild_template.o' is up to date.
make[3]: 'invite.o' is up to date.
make[3]: 'oauth2.o' is up to date.
make[3]: 'user.o' is up to date.
make[3]: 'voice.o' is up to date.
make[3]: 'webhook.o' is up to date.
make[3]: Leaving directory '/usr/src/concord/src'
cc -shared -lcurl -o ../lib/libdiscord.so concord-once.o discord-refcount.o discord-rest.o discord-rest_request.o discord-rest_ratelimit.o discord-client.o discord-events.o discord-cache.o discord-loop.o discord-gateway.o discord-gateway_dispatch.o discord-messagecommands.o discord-timer.o discord-misc.o discord-worker.o application_command.o auto_moderation.o interaction.o audit_log.o channel.o emoji.o gateway.o guild.o guild_scheduled_event.o guild_template.o invite.o oauth2.o user.o voice.o webhook.o ../gencodecs/discord_codecs.o ../core/cog-utils.o ../core/io_poller.o ../core/user-agent.o ../core/websockets.o ../core/curl-websocket.o ../core/jsmn-find.o ../core/json-build.o ../core/log.o ../core/logconf.o ../core/priority_queue.o ../core/anomap.o ../core/sha1.o ../core/threadpool.o
/usr/bin/ld: ../gencodecs/discord_codecs.o: warning: relocation against `stderr@@GLIBC_2.2.5' in read-only section `.text'
/usr/bin/ld: ../gencodecs/discord_codecs.o: relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:84: ../lib/libdiscord.so] Error 1
make[2]: Leaving directory '/usr/src/concord/src'
make[1]: *** [Makefile:77: shared] Error 2
make[1]: Leaving directory '/usr/src/concord/src'
make: *** [Makefile:32: shared] Error 2
~/source/concord $ CFLAGS="-fPIC" make shared
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o cog-utils.o cog-utils.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o io_poller.o io_poller.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o user-agent.o user-agent.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o websockets.o websockets.c
websockets.c:516:5: warning: add explicit braces to avoid dangling else [-Wdangling-else]
    else
    ^
1 warning generated.
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o curl-websocket.o curl-websocket.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o jsmn-find.o jsmn-find.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o json-build.o json-build.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o log.o log.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o logconf.o logconf.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o priority_queue.o priority_queue.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o anomap.o anomap.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o sha1.o sha1.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o threadpool.o threadpool.c
make[1]: Nothing to be done for `all'.
make[3]: Nothing to be done for `all'.
make[3]: Nothing to be done for `all'.
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o concord-once.o concord-once.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-refcount.o discord-refcount.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-rest.o discord-rest.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-rest_request.o discord-rest_request.c
discord-rest_request.c:523:25: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
    __carray_init(dest, (size_t)src->size, struct discord_attachment, , );
    ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../core/carray.h:80:26: note: expanded from macro '__carray_init'
    (carray)->realsize = length;                              \
                       ~ ^~~~~~
1 warning generated.
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-rest_ratelimit.o discord-rest_ratelimit.c
In file included from discord-rest_ratelimit.c:9:
../core/clock.h:284:18: warning: implicit conversion changes signedness: 'time_t' (aka 'long') to 'uint64_t' (aka 'unsigned long long') [-Wsign-conversion]
  res->seconds = time(NULL);
               ~ ^~~~~~~~~~
1 warning generated.
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-client.o discord-client.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-events.o discord-events.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-cache.o discord-cache.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-loop.o discord-loop.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-gateway.o discord-gateway.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-gateway_dispatch.o discord-gateway_dispatch.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-messagecommands.o discord-messagecommands.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-timer.o discord-timer.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-misc.o discord-misc.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-worker.o discord-worker.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o application_command.o application_command.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o auto_moderation.o auto_moderation.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o interaction.o interaction.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o audit_log.o audit_log.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o channel.o channel.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o emoji.o emoji.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o gateway.o gateway.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o guild.o guild.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o guild_scheduled_event.o guild_scheduled_event.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o guild_template.o guild_template.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o invite.o invite.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o oauth2.o oauth2.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o user.o user.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o voice.o voice.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o webhook.o webhook.c
cc -shared -lcurl -o ../lib/libdiscord.so concord-once.o discord-refcount.o discord-rest.o discord-rest_request.o discord-rest_ratelimit.o discord-client.o discord-events.o discord-cache.o discord-loop.o discord-gateway.o discord-gateway_dispatch.o discord-messagecommands.o discord-timer.o discord-misc.o discord-worker.o application_command.o auto_moderation.o interaction.o audit_log.o channel.o emoji.o gateway.o guild.o guild_scheduled_event.o guild_template.o invite.o oauth2.o user.o voice.o webhook.o ../gencodecs/discord_codecs.o ../core/cog-utils.o ../core/io_poller.o ../core/user-agent.o ../core/websockets.o ../core/curl-websocket.o ../core/jsmn-find.o ../core/json-build.o ../core/log.o ../core/logconf.o ../core/priority_queue.o ../core/anomap.o ../core/sha1.o ../core/threadpool.o
wec@m1-laptop.local (0) ~/source/concord $ ls lib/libdiscord.so 
lib/libdiscord.so
~/source/concord $ file lib/libdiscord.so 
lib/libdiscord.so: Mach-O 64-bit dynamically linked shared library arm64

I'm not too terribly sure what's going on there, looks like it's working properly. As for gencodecs, that's a program -- make sure that's compiled normally. The gencodecs preprocessor runs, and spits out discord_codecs.c; this then gets compiled as a normal object in the library. Also, -fPIC and -fpic both seem to work interchangably.

# CFLAGS="-fPIC" make shared
make[1]: Entering directory '/root/network/concord/core'
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o cog-utils.o cog-utils.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o io_poller.o io_poller.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o user-agent.o user-agent.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o websockets.o websockets.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o curl-websocket.o curl-websocket.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o jsmn-find.o jsmn-find.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o json-build.o json-build.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o log.o log.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o logconf.o logconf.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o priority_queue.o priority_queue.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o anomap.o anomap.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o sha1.o sha1.c
cc -fPIC -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I. -I/usr/local/include    -c -o threadpool.o threadpool.c
make[1]: Leaving directory '/root/network/concord/core'
make[1]: Entering directory '/root/network/concord/gencodecs'
cc -fPIC -I. -Iapi -I../include -I../core gencodecs-pp.c -o gencodecs-pp
Generating forward definitions
cc -E -fPIC -I. -Iapi -I../include -I../core -DGENCODECS_INIT -DGENCODECS_JSON_ENCODER -DGENCODECS_JSON_DECODER -DGENCODECS_FORWARD -DGENCODECS_DATA -nostdinc -P discord_codecs.PRE.h | ./gencodecs-pp >> discord_codecs.c
Generating source
cc -E -fPIC -I. -Iapi -I../include -I../core -DGENCODECS_INIT -DGENCODECS_JSON_ENCODER -DGENCODECS_JSON_DECODER -DGENCODECS_DATA -nostdinc -P discord_codecs.PRE.h | ./gencodecs-pp >> discord_codecs.c
Generating header
cc -E -fPIC -I. -Iapi -I../include -I../core -DGENCODECS_HEADER -DGENCODECS_DATA -nostdinc -P discord_codecs.PRE.h | ./gencodecs-pp >> discord_codecs.h
cc -E -fPIC -I. -Iapi -I../include -I../core -DGENCODECS_INIT -DGENCODECS_JSON_ENCODER -DGENCODECS_JSON_DECODER -DGENCODECS_HEADER -nostdinc -P discord_codecs.PRE.h | ./gencodecs-pp >> discord_codecs.h
cc -c -fPIC -I. -Iapi -I../include -I../core discord_codecs.c -o discord_codecs.o
make[1]: Leaving directory '/root/network/concord/gencodecs'
make[1]: Entering directory '/root/network/concord/src'
make[2]: Entering directory '/root/network/concord/src'
make[3]: Entering directory '/root/network/concord/core'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/root/network/concord/core'
make[3]: Entering directory '/root/network/concord/gencodecs'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/root/network/concord/gencodecs'
make[3]: Entering directory '/root/network/concord/src'
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o concord-once.o concord-once.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-refcount.o discord-refcount.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-rest.o discord-rest.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-rest_request.o discord-rest_request.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-rest_ratelimit.o discord-rest_ratelimit.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-client.o discord-client.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-events.o discord-events.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-cache.o discord-cache.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-loop.o discord-loop.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-gateway.o discord-gateway.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-gateway_dispatch.o discord-gateway_dispatch.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-messagecommands.o discord-messagecommands.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-timer.o discord-timer.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-misc.o discord-misc.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o discord-worker.o discord-worker.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o application_command.o application_command.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o auto_moderation.o auto_moderation.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o interaction.o interaction.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o audit_log.o audit_log.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o channel.o channel.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o emoji.o emoji.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o gateway.o gateway.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o guild.o guild.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o guild_scheduled_event.o guild_scheduled_event.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o guild_template.o guild_template.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o invite.o invite.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o oauth2.o oauth2.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o user.o user.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o voice.o voice.c
cc -c -fPIC -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -std=c99 -pthread -D_XOPEN_SOURCE=600 -DLOG_USE_COLOR -I../include -I../core -I../gencodecs -I/usr/local/include -Wall -Wextra -Wshadow -Wdouble-promotion -Wconversion -Wpedantic -o webhook.o webhook.c
make[3]: Leaving directory '/root/network/concord/src'
cc -shared -lcurl -o ../lib/libdiscord.so concord-once.o discord-refcount.o discord-rest.o discord-rest_request.o discord-rest_ratelimit.o discord-client.o discord-events.o discord-cache.o discord-loop.o discord-gateway.o discord-gateway_dispatch.o discord-messagecommands.o discord-timer.o discord-misc.o discord-worker.o application_command.o auto_moderation.o interaction.o audit_log.o channel.o emoji.o gateway.o guild.o guild_scheduled_event.o guild_template.o invite.o oauth2.o user.o voice.o webhook.o ../gencodecs/discord_codecs.o ../core/cog-utils.o ../core/io_poller.o ../core/user-agent.o ../core/websockets.o ../core/curl-websocket.o ../core/jsmn-find.o ../core/json-build.o ../core/log.o ../core/logconf.o ../core/priority_queue.o ../core/anomap.o ../core/sha1.o ../core/threadpool.o
make[2]: Leaving directory '/root/network/concord/src'
make[1]: Leaving directory '/root/network/concord/src'
# file lib/libdiscord.so 
lib/libdiscord.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5bff54c2333f42f000f114ba16f1234872230f84, not stripped

Oh, I should have probably also thrown in a Linux build for good measure -- here's what that got me.

I was running CFLAGS="-fPIC" make and then CFLAGS="-fPIC" make shared but I guess only the latter is really necessary here.

I figured out the problem; looking at the compilation for gencodecs was instructive - this, right after make clean:

make[3]: Leaving directory '/usr/src/concord/gencodecs'
make[3]: Entering directory '/usr/src/concord/src'

It appears that running make clean at the top level doesn't properly recurse into subdirectories; I'd assumed that running make clean and running things again would suffice, but I still had a dirty build environment. Initially I had compiled normally and thus all subsequent attempts to compile with fPIC didn't work properly.

cding into gencodecs, running make clean there separately, and then compiling at the top level again worked properly afterwards.

Easy to work around, but maybe a possible future improvement?
Thanks for the help!

Yeah, it looks like make clean isn't cleaning out the gencodecs preproc binaries. I'll go ahead and get that fix thrown in, that's definitely a good QoL addition. Thanks for alerting us to this issue!