Problems with linking the static satellite libs on OS X

Hi all,
only now did I have time to test out the latest releases.
I only use SDL 1.2x, SDL_net and SDL_ttf for building OS X snapshots for Exult, Pentagram and Dosbox.
Exult only uses SDL and is fine.

Dosbox uses SDL_net and fails with claiming the compiled static lib is the wrong architecture, but it’s not.

Code:
ld: warning: in /opt/exult.i386/lib/libSDL_net.a, file was built for unsupported file format which is not the architecture being linked (i386)
Undefined symbols:
"_SDLNet_TCP_GetPeerAddress", referenced from:
TCPClientSocket::GetRemoteAddressString(unsigned char*)in libserial.a(misc_util.o)
"_SDLNet_CheckSockets", referenced from:
TCPClientSocket::GetcharNonBlock() in libserial.a(misc_util.o)
TCPClientSocket::ReceiveArray(unsigned char*, unsigned int*)in libserial.a(misc_util.o)
"_SDLNet_FreeSocketSet", referenced from:
TCPClientSocket::~TCPClientSocket()in libserial.a(misc_util.o)
"_SDLNet_UDP_Bind", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
"_SDLNet_ResolveHost", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
IPX_StartServer(unsigned short)in libhardware.a(ipxserver.o)
TCPServerSocket::TCPServerSocket(unsigned short)in libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in libserial.a(misc_util.o)
"_SDLNet_TCP_Close", referenced from:
TCPServerSocket::~TCPServerSocket()in libserial.a(misc_util.o)
TCPClientSocket::~TCPClientSocket()in libserial.a(misc_util.o)
"_SDLNet_Init", referenced from:
IPX::IPX(Section*) in libhardware.a(ipx.o)
TCPServerSocket::TCPServerSocket(unsigned short)in libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(_TCPsocket*)in libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(int)in libserial.a(misc_util.o)
"_SDLNet_UDP_Open", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
IPX_StartServer(unsigned short)in libhardware.a(ipxserver.o)
"_SDLNet_UDP_Recv", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
IPX_ClientLoop() in libhardware.a(ipx.o)
IPXNET::Run() in libhardware.a(ipx.o)
IPX_ServerLoop() in libhardware.a(ipxserver.o)
"_SDLNet_UDP_Send", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
receivePacket(unsigned char*, short)in libhardware.a(ipx.o)
handleIpxRequest() in libhardware.a(ipx.o)
IPXNET::Run() in libhardware.a(ipx.o)
ackClient(IPaddress) in libhardware.a(ipxserver.o)
IPX_ServerLoop() in libhardware.a(ipxserver.o)
IPX_ServerLoop() in libhardware.a(ipxserver.o)
"_SDLNet_UDP_Close", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
DisconnectFromServer(bool) in libhardware.a(ipx.o)
IPX_StopServer() in libhardware.a(ipxserver.o)
"_SDLNet_TCP_Accept", referenced from:
TCPServerSocket::Accept() in libserial.a(misc_util.o)
"_SDLNet_AllocSocketSet", referenced from:
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(_TCPsocket*)in libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(int)in libserial.a(misc_util.o)
"_SDLNet_DelSocket", referenced from:
TCPClientSocket::~TCPClientSocket()in libserial.a(misc_util.o)
"_SDLNet_AddSocket", referenced from:
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(_TCPsocket*)in libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(int)in libserial.a(misc_util.o)
"_SDLNet_TCP_Open", referenced from:
TCPServerSocket::TCPServerSocket(unsigned short)in libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in libserial.a(misc_util.o)
"_SDLNet_TCP_Recv", referenced from:
TCPClientSocket::GetcharNonBlock() in libserial.a(misc_util.o)
TCPClientSocket::ReceiveArray(unsigned char*, unsigned int*)in libserial.a(misc_util.o)
"_SDLNet_TCP_Send", referenced from:
TCPClientSocket::FlushBuffer() in libserial.a(misc_util.o)
TCPClientSocket::SendByteBuffered(unsigned char)in libserial.a(misc_util.o)
TCPClientSocket::SendArray(unsigned char*, unsigned int)in libserial.a(misc_util.o)
TCPClientSocket::Putchar(unsigned char)in libserial.a(misc_util.o)
ld: symbol(s) not found

Pentagram complains about the same thing for SDL_ttf

Code:
ld: warning: ignoring file /opt/exult.x86_64/lib/libSDL_ttf.a, file was built for archive which is not the architecture being linked (x86_64)
Undefined symbols for architecture x86_64:
"_TTF_OpenFontRW", referenced from:
FontManager::getTTF_Font(std::basic_string<char, std::char_traits, std::allocator >, int)in FontManager.o
"_TTF_CloseFont", referenced from:
FontManager::~FontManager()in FontManager.o
"_TTF_Quit", referenced from:
FontManager::~FontManager()in FontManager.o
"_TTF_Init", referenced from:
FontManager::FontManager(bool)in FontManager.o
"_TTF_RenderUNICODE_Solid", referenced from:
TTFont::renderText(std::basic_string<char, std::char_traits, std::allocator > const&, unsigned int&, int, int, Pentagram::Font::TextAlign, bool, unsigned long)in TTFont.o
"_TTF_RenderUNICODE_Shaded", referenced from:
TTFont::renderText(std::basic_string<char, std::char_traits, std::allocator > const&, unsigned int&, int, int, Pentagram::Font::TextAlign, bool, unsigned long)in TTFont.o
"_TTF_SizeUNICODE", referenced from:
TTFont::renderText(std::basic_string<char, std::char_traits, std::allocator > const&, unsigned int&, int, int, Pentagram::Font::TextAlign, bool, unsigned long)in TTFont.o
TTFont::getStringSize(std::basic_string<char, std::char_traits, std::allocator > const&, int&, int&)in TTFont.o
"_TTF_FontLineSkip", referenced from:
TTFont::getBaselineSkip() in TTFont.o
"_TTF_FontAscent", referenced from:
TTFont::getBaseline() in TTFont.o
"_TTF_FontHeight", referenced from:
TTFont::getHeight() in TTFont.o
"_TTF_GlyphMetrics", referenced from:
TTFont::TTFont(_TTF_Font*, unsigned int, int, bool, bool)in TTFont.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

This used to work with previous releases. Have there been obvious changes that prevent linking to the static libs now?

Interestingly when I compile for PPC the error isn’t happening and all links fine.

now I’m a bit closer to the mystery:

seems the static libs I built are not really static for some reason.

otool -L ./.libs/libsdl_ttf.a
Archive : ./.libs/libsdl_ttf.a
./.libs/libsdl_ttf.a(libSDLmain.a): is not an object file
./.libs/libsdl_ttf.a(libSDL.a): is not an object file
./.libs/libsdl_ttf.a(SDL_ttf.o):

I have no idea why this happens as I somehow managed to make the correct static builds before.

Since I’m talking to myself… :slight_smile:
Solved it… I needed to point pkg_config at nothing (export PKG_CONFIG_PATH=) somehow pkgconfig screwed everything up. Now I need to rebuild all my libs… :slight_smile:

My casual glance at the error message makes me think you don’t have
the architecture you need in your libraries. (e.g. You need i386, but
you only have ppc.) You can run lipo -info on the library to see what
architectures are inside.On 1/26/12, Dominus wrote:

Hi all,
only now did I have time to test out the latest releases.
I only use SDL 1.2x, SDL_net and SDL_ttf for building OS X snapshots for
Exult, Pentagram and Dosbox.
Exult only uses SDL and is fine.

Dosbox uses SDL_net and fails with claiming the compiled static lib is the
wrong architecture, but it’s not.

Code:
ld: warning: in /opt/exult.i386/lib/libSDL_net.a, file was built for
unsupported file format which is not the architecture being linked (i386)
Undefined symbols:
"_SDLNet_TCP_GetPeerAddress", referenced from:
TCPClientSocket::GetRemoteAddressString(unsigned char*)in
libserial.a(misc_util.o)
"_SDLNet_CheckSockets", referenced from:
TCPClientSocket::GetcharNonBlock() in libserial.a(misc_util.o)
TCPClientSocket::ReceiveArray(unsigned char*, unsigned int*)in
libserial.a(misc_util.o)
"_SDLNet_FreeSocketSet", referenced from:
TCPClientSocket::~TCPClientSocket()in libserial.a(misc_util.o)
"_SDLNet_UDP_Bind", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
"_SDLNet_ResolveHost", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
IPX_StartServer(unsigned short)in libhardware.a(ipxserver.o)
TCPServerSocket::TCPServerSocket(unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
"_SDLNet_TCP_Close", referenced from:
TCPServerSocket::~TCPServerSocket()in libserial.a(misc_util.o)
TCPClientSocket::~TCPClientSocket()in libserial.a(misc_util.o)
"_SDLNet_Init", referenced from:
IPX::IPX(Section*) in libhardware.a(ipx.o)
TCPServerSocket::TCPServerSocket(unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(_TCPsocket*)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(int)in libserial.a(misc_util.o)
"_SDLNet_UDP_Open", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
IPX_StartServer(unsigned short)in libhardware.a(ipxserver.o)
"_SDLNet_UDP_Recv", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
IPX_ClientLoop() in libhardware.a(ipx.o)
IPXNET::Run() in libhardware.a(ipx.o)
IPX_ServerLoop() in libhardware.a(ipxserver.o)
"_SDLNet_UDP_Send", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
receivePacket(unsigned char*, short)in libhardware.a(ipx.o)
handleIpxRequest() in libhardware.a(ipx.o)
IPXNET::Run() in libhardware.a(ipx.o)
ackClient(IPaddress) in libhardware.a(ipxserver.o)
IPX_ServerLoop() in libhardware.a(ipxserver.o)
IPX_ServerLoop() in libhardware.a(ipxserver.o)
"_SDLNet_UDP_Close", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
DisconnectFromServer(bool) in libhardware.a(ipx.o)
IPX_StopServer() in libhardware.a(ipxserver.o)
"_SDLNet_TCP_Accept", referenced from:
TCPServerSocket::Accept() in libserial.a(misc_util.o)
"_SDLNet_AllocSocketSet", referenced from:
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(_TCPsocket*)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(int)in libserial.a(misc_util.o)
"_SDLNet_DelSocket", referenced from:
TCPClientSocket::~TCPClientSocket()in libserial.a(misc_util.o)
"_SDLNet_AddSocket", referenced from:
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(_TCPsocket*)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(int)in libserial.a(misc_util.o)
"_SDLNet_TCP_Open", referenced from:
TCPServerSocket::TCPServerSocket(unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
"_SDLNet_TCP_Recv", referenced from:
TCPClientSocket::GetcharNonBlock() in libserial.a(misc_util.o)
TCPClientSocket::ReceiveArray(unsigned char*, unsigned int*)in
libserial.a(misc_util.o)
"_SDLNet_TCP_Send", referenced from:
TCPClientSocket::FlushBuffer() in libserial.a(misc_util.o)
TCPClientSocket::SendByteBuffered(unsigned char)in
libserial.a(misc_util.o)
TCPClientSocket::SendArray(unsigned char*, unsigned int)in
libserial.a(misc_util.o)
TCPClientSocket::Putchar(unsigned char)in libserial.a(misc_util.o)
ld: symbol(s) not found

Pentagram complains about the same thing for SDL_ttf

Code:
ld: warning: ignoring file /opt/exult.x86_64/lib/libSDL_ttf.a, file was
built for archive which is not the architecture being linked (x86_64)
Undefined symbols for architecture x86_64:
"_TTF_OpenFontRW", referenced from:
FontManager::getTTF_Font(std::basic_string<char,
std::char_traits, std::allocator >, int)in FontManager.o
"_TTF_CloseFont", referenced from:
FontManager::~FontManager()in FontManager.o
"_TTF_Quit", referenced from:
FontManager::~FontManager()in FontManager.o
"_TTF_Init", referenced from:
FontManager::FontManager(bool)in FontManager.o
"_TTF_RenderUNICODE_Solid", referenced from:
TTFont::renderText(std::basic_string<char, std::char_traits,
std::allocator > const&, unsigned int&, int, int,
Pentagram::Font::TextAlign, bool, unsigned long)in TTFont.o
"_TTF_RenderUNICODE_Shaded", referenced from:
TTFont::renderText(std::basic_string<char, std::char_traits,
std::allocator > const&, unsigned int&, int, int,
Pentagram::Font::TextAlign, bool, unsigned long)in TTFont.o
"_TTF_SizeUNICODE", referenced from:
TTFont::renderText(std::basic_string<char, std::char_traits,
std::allocator > const&, unsigned int&, int, int,
Pentagram::Font::TextAlign, bool, unsigned long)in TTFont.o
TTFont::getStringSize(std::basic_string<char, std::char_traits,
std::allocator > const&, int&, int&)in TTFont.o
"_TTF_FontLineSkip", referenced from:
TTFont::getBaselineSkip() in TTFont.o
"_TTF_FontAscent", referenced from:
TTFont::getBaseline() in TTFont.o
"_TTF_FontHeight", referenced from:
TTFont::getHeight() in TTFont.o
"_TTF_GlyphMetrics", referenced from:
TTFont::TTFont(_TTF_Font*, unsigned int, int, bool, bool)in TTFont.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

This used to work with previous releases. Have there been obvious changes
that prevent linking to the static libs now?


Beginning iPhone Games Development
http://playcontrol.net/iphonegamebook/

Eric Wing wrote:> On 1/26/12, Dominus <@Dominus> wrote:

Hi all,
only now did I have time to test out the latest releases.
I only use SDL 1.2x, SDL_net and SDL_ttf for building OS X snapshots for
Exult, Pentagram and Dosbox.
Exult only uses SDL and is fine.

Dosbox uses SDL_net and fails with claiming the compiled static lib is the
wrong architecture, but it’s not.

Code:
ld: warning: in /opt/exult.i386/lib/libSDL_net.a, file was built for
unsupported file format which is not the architecture being linked (i386)
Undefined symbols:
"_SDLNet_TCP_GetPeerAddress", referenced from:
TCPClientSocket::GetRemoteAddressString(unsigned char*)in
libserial.a(misc_util.o)
"_SDLNet_CheckSockets", referenced from:
TCPClientSocket::GetcharNonBlock() in libserial.a(misc_util.o)
TCPClientSocket::ReceiveArray(unsigned char*, unsigned int*)in
libserial.a(misc_util.o)
"_SDLNet_FreeSocketSet", referenced from:
TCPClientSocket::~TCPClientSocket()in libserial.a(misc_util.o)
"_SDLNet_UDP_Bind", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
"_SDLNet_ResolveHost", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
IPX_StartServer(unsigned short)in libhardware.a(ipxserver.o)
TCPServerSocket::TCPServerSocket(unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
"_SDLNet_TCP_Close", referenced from:
TCPServerSocket::~TCPServerSocket()in libserial.a(misc_util.o)
TCPClientSocket::~TCPClientSocket()in libserial.a(misc_util.o)
"_SDLNet_Init", referenced from:
IPX::IPX(Section*) in libhardware.a(ipx.o)
TCPServerSocket::TCPServerSocket(unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(_TCPsocket*)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(int)in libserial.a(misc_util.o)
"_SDLNet_UDP_Open", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
IPX_StartServer(unsigned short)in libhardware.a(ipxserver.o)
"_SDLNet_UDP_Recv", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
IPX_ClientLoop() in libhardware.a(ipx.o)
IPXNET::Run() in libhardware.a(ipx.o)
IPX_ServerLoop() in libhardware.a(ipxserver.o)
"_SDLNet_UDP_Send", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
receivePacket(unsigned char*, short)in libhardware.a(ipx.o)
handleIpxRequest() in libhardware.a(ipx.o)
IPXNET::Run() in libhardware.a(ipx.o)
ackClient(IPaddress) in libhardware.a(ipxserver.o)
IPX_ServerLoop() in libhardware.a(ipxserver.o)
IPX_ServerLoop() in libhardware.a(ipxserver.o)
"_SDLNet_UDP_Close", referenced from:
ConnectToServer(char const*)in libhardware.a(ipx.o)
DisconnectFromServer(bool) in libhardware.a(ipx.o)
IPX_StopServer() in libhardware.a(ipxserver.o)
"_SDLNet_TCP_Accept", referenced from:
TCPServerSocket::Accept() in libserial.a(misc_util.o)
"_SDLNet_AllocSocketSet", referenced from:
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(_TCPsocket*)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(int)in libserial.a(misc_util.o)
"_SDLNet_DelSocket", referenced from:
TCPClientSocket::~TCPClientSocket()in libserial.a(misc_util.o)
"_SDLNet_AddSocket", referenced from:
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(_TCPsocket*)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(int)in libserial.a(misc_util.o)
"_SDLNet_TCP_Open", referenced from:
TCPServerSocket::TCPServerSocket(unsigned short)in
libserial.a(misc_util.o)
TCPClientSocket::TCPClientSocket(char const*, unsigned short)in
libserial.a(misc_util.o)
"_SDLNet_TCP_Recv", referenced from:
TCPClientSocket::GetcharNonBlock() in libserial.a(misc_util.o)
TCPClientSocket::ReceiveArray(unsigned char*, unsigned int*)in
libserial.a(misc_util.o)
"_SDLNet_TCP_Send", referenced from:
TCPClientSocket::FlushBuffer() in libserial.a(misc_util.o)
TCPClientSocket::SendByteBuffered(unsigned char)in
libserial.a(misc_util.o)
TCPClientSocket::SendArray(unsigned char*, unsigned int)in
libserial.a(misc_util.o)
TCPClientSocket::Putchar(unsigned char)in libserial.a(misc_util.o)
ld: symbol(s) not found

Pentagram complains about the same thing for SDL_ttf

Code:
ld: warning: ignoring file /opt/exult.x86_64/lib/libSDL_ttf.a, file was
built for archive which is not the architecture being linked (x86_64)
Undefined symbols for architecture x86_64:
"_TTF_OpenFontRW", referenced from:
FontManager::getTTF_Font(std::basic_string<char,
std::char_traits, std::allocator >, int)in FontManager.o
"_TTF_CloseFont", referenced from:
FontManager::~FontManager()in FontManager.o
"_TTF_Quit", referenced from:
FontManager::~FontManager()in FontManager.o
"_TTF_Init", referenced from:
FontManager::FontManager(bool)in FontManager.o
"_TTF_RenderUNICODE_Solid", referenced from:
TTFont::renderText(std::basic_string<char, std::char_traits,
std::allocator > const&, unsigned int&, int, int,
Pentagram::Font::TextAlign, bool, unsigned long)in TTFont.o
"_TTF_RenderUNICODE_Shaded", referenced from:
TTFont::renderText(std::basic_string<char, std::char_traits,
std::allocator > const&, unsigned int&, int, int,
Pentagram::Font::TextAlign, bool, unsigned long)in TTFont.o
"_TTF_SizeUNICODE", referenced from:
TTFont::renderText(std::basic_string<char, std::char_traits,
std::allocator > const&, unsigned int&, int, int,
Pentagram::Font::TextAlign, bool, unsigned long)in TTFont.o
TTFont::getStringSize(std::basic_string<char, std::char_traits,
std::allocator > const&, int&, int&)in TTFont.o
"_TTF_FontLineSkip", referenced from:
TTFont::getBaselineSkip() in TTFont.o
"_TTF_FontAscent", referenced from:
TTFont::getBaseline() in TTFont.o
"_TTF_FontHeight", referenced from:
TTFont::getHeight() in TTFont.o
"_TTF_GlyphMetrics", referenced from:
TTFont::TTFont(_TTF_Font*, unsigned int, int, bool, bool)in TTFont.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

This used to work with previous releases. Have there been obvious changes
that prevent linking to the static libs now?

My casual glance at the error message makes me think you don’t have
the architecture you need in your libraries. (e.g. You need i386, but
you only have ppc.) You can run lipo -info on the library to see what
architectures are inside.

Thanks but that wasn’t it.
The problem was that I had “export PKG_CONFIG_PATH=pathtomyarchspecificprefix”" This caused the makefiles to contain

Code:
SDL_CONFIG = pkg-config sdl
SDL_LIBS = -Wl,-framework,Cocoa /opt/arch.x86_64/lib/libSDLmain.a /opt/arch.x86_64/lib/libSDL.a -Wl,-framework,OpenGL -Wl,-framework,ApplicationServices -Wl,-framework,Carbon -Wl,-framework,AudioToolbox -Wl,-framework,AudioUnit -Wl,-framework,IOKit -L/opt/arch.x86_64/lib -lSDLmain -lSDL

instead of the correct:

Code:
SDL_CONFIG = /opt/arch.x86_64/bin//sdl-config
SDL_LIBS = -L/opt/arch.x86_64/lib -lSDLmain -lSDL -Wl,-framework,Cocoa

So that is obviously doing bad stuff and for some reason building with the static SDL libs into the SDL_ttf libs as well as linking dynamicly to it. This confuses the linker when you link the static SDL_ttf libs to an app. I checked all it’s linking and everything had the correct arch but all the double/tripple linking confuses the linker…