2011-03-09 103 views
0

我有一個包含函數聲明的頭文件,我們稱之爲A.h,我在文件A1.cpp中實現了這個函數。現在A1.cpp有其他文件包含。並非所有包含在A1.cpp中的文件都可用(第三方問題)。現在我的問題是,是否有可能從一個文件進行函數調用讓我們說main.cpp,動態鏈接到A1.cpp(沒有編譯A1.cpp),因爲我有一些來自第三方的文件不可用?鏈接C++文件

我的猜測是否定的,因爲除非我包含可用的文件,否則我無法獲得A1.cpp的對象文件,因此我無法調用函數。然而糾正我,如果我錯了,一個編譯文件的A1.cpp ie A1.o仍然可以使用,因爲我可以鏈接到它,因此使函數調用不依賴於其他包含文件(我沒有?)

對我來說很容易,我不是一個C++的傢伙:-)!任何幫助或在這個問題的見解表示讚賞!哦,順便說一句,我已經開始使用ndk的機器人,因此麻煩:-)

回答

1

如果你有目標文件(A.o),爲什麼你不能把它鏈接到你的二進制文件?

g++ -o main main.o A.o 
+0

如何鏈接到只包含函數聲明的A.o將獲得A1.cpp中定義的函數定義?這是甚至可能的,只是想知道...我猜不是我所能想到的.. – GodOnScooter 2011-03-09 22:33:33

+1

在編譯'A.o'時,有所有必需的源文件可用。所以,你將第三方關閉的東西當作預編譯的二進制blob。這足以鏈接到。您可以使用的接口爲明文「A.h」。應該管用。以這種形式獲得商業圖書館很常見(靜態圖書館)。 雖然你也需要其他二進制blob'blahblah.o'來滿足'A.o'的依賴關係。 – 2011-03-09 22:39:54

+0

嗯..這實際上是有道理的,但如果blahblah.h有其他依賴項作爲其他包含的文件,我會需要所有其他相關的二進制blob,所以我想我要找的答案是獲取所有依賴項的二進制blob如果有的話),然後我可以成爲快樂的男人,否則我是死鴨子:-) – GodOnScooter 2011-03-09 22:50:39

0

如果我已經理解你的問題,那麼答案是否定的,而不是當目標只是一個cpp文件。 鏈接到別的東西而不編譯它的唯一方法是將它放在一個dll或預編譯的庫(windows中的.lib)。如果第三部分內容在.lib或dll中,那麼您應該很幸運,您只需要頭文件,然後告訴編譯器鏈接靜態或動態庫。 讓我知道,如果這是有道理的,如果不是,我可以澄清更多關於你的設置和你想鏈接的信息。

+0

好的考慮這個 文件A.h void hello(); 文件A1.cpp 的#include 「blahblah.cpp」 //我沒有blahblah.cpp 的#include 「啊」 無效你好(){// 的東西在這裏 } 文件main.cpp中 #include「啊」 void main(){ hello(); } 現在我可以編譯主要,因爲我有A.h和A1.cpp,所以我包括在主要A.h,我可以在主要包括A1.cpp,但問題是我沒有blahblah.h可用。所以我試圖通過動態鏈接到A1.cpp,但我的猜測是不可能的(我明白爲什麼這是不可能的),所以有A1.o是唯一的補救措施,以防止我無法獲得依賴關係A1.cpp? – GodOnScooter 2011-03-09 22:31:17