我原來的問題是在下面,但它發展到以下相關的問題:是否有任何錯誤的鏈接器語句中的對象後面的鏈接器標誌?當在C++中運行鏈接步驟時,鏈接器標誌的順序是否很重要?
當我在Eclipse中構建,下面的鏈接語句運行:
g++ -fopenmp -lconfig++ -o "pc2" ./main.o ./sampling.o ./simulation.o
這是不正確的,因爲lconfig++
必須遵守,而不是之前,對象文件清單。所以,我修改了makefile,這是Eclipse基於項目設置自動生成的。具體地講,我改變生成文件
# Tool invocations
pc2: $(OBJS) $(USER_OBJS)
@echo 'Building target: [email protected]'
@echo 'Invoking: GCC C++ Linker'
g++ -fopenmp -lconfig++ -o "pc2" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: [email protected]'
@echo ' '
的這一部分是如下:
# Tool invocations
pc2: $(OBJS) $(USER_OBJS)
@echo 'Building target: [email protected]'
@echo 'Invoking: GCC C++ Linker'
g++ -o "pc2" $(OBJS) $(USER_OBJS) $(LIBS) -fopenmp -lconfig++
@echo 'Finished building target: [email protected]'
@echo ' '
然後,修改1線生成文件的,就進入後
make clean all -C release
在命令行中產生以下正確的鏈接語句:
g++ -o "pc2" ./main.o ./sampling.o ./simulation.o -fopenmp -lconfig++
因此,我知道如何解決makefile文件,使構建過程是正確的。
我在做什麼不是知道如何配置Eclipse,使其生成的makefile將鏈接器標誌(或「選項」?)放在正確的位置。
發佈此問題後,我發現可以將設置>連接器>「命令行模式」中的$ {FLAGS}移至模式規範的末尾。這解決了這個問題。然而,它提出了一個問題:有什麼理由可能需要鏈接器標誌位於目標文件之前? – synaptik