function.cpp寫入未定義參照功能 - >它被編譯成function.o,然後libFunction.so克++鏈接錯誤:當功能名稱使用#
#define PASTEHELPER(a,b) a ## b
#define PASTE(a,b) PASTEHELPER(a,b)
void PASTE(My,Function)() { .... }
主。 cpp - >編譯爲main.o.但鏈接時出錯
void MyFunction();
鏈接g ++中的錯誤。 (但是,在Visual Studio中成功)
g++ -mtune=i686 -MP -MMD -MT .o -Wextra -Woverloaded-virtual -Wno-sign-compare -Wno-conversion -Wno-missing-field-initializers -O3 -DNDEBUG -fno-strict-aliasing -fPIC -fdiagnostics-show-option -DPROJECT=MyProjec -o /mypath main.o -L.. -L/sbcimp/run/pd/gcc/32-bit/4.4.2/lib/gcc/i686-pc-linux-gnu/4.4.2 -L/sbcimp/run/pd/gcc/32-bit/4.4.2/lib -lFunction -pthread -L/sbcimp/run/pd/python/2.7.1/lib -lpython2.7 -l util -L/sbcimp/run/pd/boost/32-bit/1.47.0_gcc4.4.2/lib -lboost_filesystem -lboost_thread -lboost_regex -lboost_system -Wl,-rpath,/sbcimp/run/pd/boost/32-bit/1.47.0_gcc4.4.2/lib -L/sbcimp/run/pd/apache_xerces-c/32-bit/3.1.1_mt_gcc4.4.2/lib -lxerces-c -Wl,-rpath,/sbcimp/run/pd/apache_xerces-c/32-bit/3.1.1_mt_gcc4.4.2/lib -ldl -Wl,-z,origin -Wl,-rpath,'$ORIGIN' -Wl,-rpath,/sbcimp/run/pd/gcc/32-bit/4.4.2/lib/gcc/i686-pc-linux-gnu/4.4.2,-rpath,/sbcimp/run/pd/gcc/32-bit/4.4.2/lib,-soname,MyProject
main.cpp: undefined reference to 'MyFunction'.
函數未在任何.h文件中定義。這是問題嗎?如果需要在.h中聲明函數,怎麼寫呢?
你真的編譯'function.cpp'作爲你在g ++版本中的一部分嗎?另外,爲什麼你的文章說'鏈接器錯誤報告在'.h'文件中?通常在'.cpp'文件中報告Liker錯誤。你如何在g ++中編譯你的文件? – AnT 2012-08-02 02:02:09
安德雷,我糾正了我的問題。 – Cammie 2012-08-02 03:17:26
宏的使用(相當奇怪)是令人困惑的問題。你可以在你的問題中修改代碼,以便'function.cpp'直接定義'MyFunction',而不使用任何宏(假設它仍然存在問題)?此外,錯誤消息引用'function.h',但是您沒有向我們顯示該文件或任何'#include'指令。如果您可以向我們展示*完整的*自成一體的代碼,以及您使用的確切的g ++命令和錯誤消息,我們可以幫助您更好地完成任務。 – 2012-08-02 03:26:19