Я столкнулся с той же проблемой, но у нее был дополнительный поворот. Ответ @clintm решил ее, но я подумал, что опишу свой вариант проблемы здесь для дальнейшего использования ...
Makefile на 32-битном компьютере:
CXX=g++
CXXFLAGS= -O3 -Wall
...
...
%.o: %.c
$(CXX) $(CXXFLAGS) -fpic -c $<
libmylibrary.so: $(OBJECTS)
$(CXX) -shared -Wl,-soname,$@ -o $@ $(OBJECTS)
Это правильно скомпилировано. Но тот же Makefile не удался, когда я попробовал его на 64-битной машине. Я изменил «-fpic» на «-fPIC», и это все равно не удалось. Я изменил правило объекта на:
%.o: %.c
$(CXX) -fPIC $(CXXFLAGS) -c $<
и все равно не получилось.
Наконец, я поместил «-fPIC» в фактическую переменную компилятора (так что теперь «-fPIC» появляется в правиле для каждого объекта и правило для общей библиотеки):
CXX=g++ -fPIC
CXXFLAGS= -g -O3 -Wall
...
%.o: %.c
$(CXX) $(CXXFLAGS) -c -o $@ $<
libalglib.so: $(OBJECTS)
$(CXX) -shared -Wl,-soname,$@ -o $@ $(OBJECTS)
И это сработало!