Hi Ryan, If you resolve linkage of your bridge.so such that internal symbols are pre-linked (prebind), then bridge.so will use jellyfish() from libpapa.a which it has linked against. If you do not resolve linkage of your bridge.so, then the jellyfish() symbol in there is a candidate symbol, but the .so will defer to the main application¹s jellyfish() if one is already present. This is called "weak linkage". This is not a GCC issue. GCC is a compiler and a tool-chain driver, it is not a linker or link-loader. It¹s is an operating system, linker, and link-loader issue. Other platforms may do it differently*. If your code is cross-platform, these different subtleties and nuances can be a source of cross-platform frustration. Sincerely, --Eljay * Hence my above mentioned explanation may not be applicable on other platforms. From your description, it seems to me that the platform you are working on that this is the correct explanation.