同じ問題が発生しましたが、さらにひねりがありました。@clintmの回答で解決しましたが、今後の参考のために、ここで問題のバリエーションを説明すると思いました...
32 ビット マシンの Makefile:
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)
そしてそれは働いた!