为什么构建静态库(.a)不会产生任何错误并且能正常工作:
同时,当构建共享库(.so)时,出现以下错误:
$(LIBRARY): assertion.o
$(AR) $(OUTPUT_STATIC_LIB_DIR)/$(LIBRARY) $(OUTPUT_DIR)/assertion.o
同时,当构建共享库(.so)时,出现以下错误:
$(SHARED_LIBRARY): assertion.o
$(CC) $(CFLAGS) -shared -o $(OUTPUT_LIB_DIR)/$(SHARED_LIBRARY) $(OUTPUT_DIR)/assertion.o
错误信息:
Undefined symbols for architecture x86_64:
"_float_cmp_func", referenced from:
.a
文件只包含适用于该库的代码,并且不能说明它依赖于其他东西 - 例如另一个.a
中的代码。当您构建.so
时,可以将其链接到依赖于另一个库,因此用户只需要链接到父.so
文件,而不需要链接到所有其他.so
文件。例如,gcc -shared -fPIC -o libb.so -L. -la
将使libb.so
在运行时也依赖于liba.so
。 - Anya Shenanigans