我遇到了同样的问题,但它有一个额外的转折。@clintm 的答案解决了它,但我想我会在这里描述我对问题的变化以供将来参考......
32 位机器上的 Makefile:
CXX=g++
CXXFLAGS= -O3 -Wall
...
...
%.o: %.c
$(CXX) $(CXXFLAGS) -fpic -c $<
libmylibrary.so: $(OBJECTS)
$(CXX) -shared -Wl,-soname,$@ -o $@ $(OBJECTS)
这编译正确。但是当我在 64 位机器上尝试时,相同的 Makefile 失败了。我将“-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)
它奏效了!