2009-10-27 52 views
1

我在我的C++項目中使用第三方靜態庫,它依賴於libssl 0.9.7a版本。由於各種原因,我的項目使用的libssl版本是0.9.8e。是否與0.9.7a兼容的libssl 0.9.8e版本?

一切工作正常,直到第三方對其靜態庫進行了最近的更改。當它包含這個新版本的靜態庫時,我無法成功地編譯我的應用程序。舊版本編譯得很好。

我不是很熟悉這些庫依賴和它們的向後兼容性。我們被告知我們必須使用第三方建議的版本。我只是想知道這是否是真正的原因。國際海事組織,我想它應該是向後兼容的,不是嗎?

任何方向與解決這個問題非常感謝。

下面是我得到的編譯錯誤:

cc1plus: note: obsolete option -I- used, please use -iquote instead 

In file included from /usr/include/openssl/e_os2.h:56, 
       from /usr/include/openssl/ssl.h:173, 
       from MyClass.cpp:28: 

/usr/include/openssl/opensslconf.h:13:30: error: opensslconf-i386.h: No such file or directory 
/usr/include/openssl/bn.h:288: error: expected ';' before '*' token 
/usr/include/openssl/bn.h:304: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:407: error: 'BN_ULONG' was not declared in this scope 
/usr/include/openssl/bn.h:450: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:451: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:452: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:453: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:454: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:455: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:456: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:471: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:764: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:765: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:766: error: variable or field 'bn_sqr_words' declared void 
/usr/include/openssl/bn.h:766: error: 'BN_ULONG' was not declared in this scope 
/usr/include/openssl/bn.h:766: error: 'rp' was not declared in this scope 
/usr/include/openssl/bn.h:766: error: expected primary-expression before 'const' 
/usr/include/openssl/bn.h:766: error: expected primary-expression before 'int' 
/usr/include/openssl/bn.h:767: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:768: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:769: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/ssl3.h:303: error: 'PQ_64BIT' does not name a type 
/usr/include/openssl/pqueue.h:73: error: 'PQ_64BIT' does not name a type 
/usr/include/openssl/pqueue.h:80: error: 'PQ_64BIT' was not declared in this scope 
/usr/include/openssl/pqueue.h:80: error: expected primary-expression before 'void' 
/usr/include/openssl/pqueue.h:89: error: 'PQ_64BIT' has not been declared 
/usr/include/openssl/dtls1.h:92: error: 'PQ_64BIT' does not name a type 
/usr/include/openssl/dtls1.h:94: error: 'PQ_64BIT' does not name a type 

該錯誤消息說,有沒有這樣的文件作爲opensslconf-i386.h,但它確實存在。

任何想法發生了什麼問題?

謝謝你的時間!

回答

3

的C預處理器沒有找到opensslconf-i386.h文件 - 所以你需要找出爲什麼會失敗。你已經從編譯器得到了關於使用廢棄選項的警告(並且建議修復) - 這樣做。

OK - 你說文件存在:它在哪裏,它有什麼權限?它是如何被opensslconf.h包含的?該行與包含的其他任何OpenSSL頭文件有何不同?除了已棄用的'-I-'之外,您正在使用的'-I'選項是什麼?

在這個階段,我會說你有任何的安裝故障或奇數球的命令行。

問題標題是......與問題主體沒有明顯關係。

  • 在操作層面,是的,這兩個互操作用於大多數目的。
  • 在編譯級別,是的,兩者基本兼容(在0.9.7a中工作的應該可以在0.9.8e下工作)。
  • 在內部和配置級別,會有小的差異;例如,可能會有更多新版本支持的額外密碼或模式。
+0

@Jonathan:非常感謝您的回覆!我認爲,我的建議取得了一些進展。我使用靜態庫編寫了一個示例客戶端來孤立地測試此問題,並查看示例客戶端編譯是否正常(我的應用程序是怪物)。示例客戶端編譯良好,沒有任何問題。所以,如你所說,這個問題似乎是命令行。現在我將看看正在使用的命令行選項,如果我有任何疑問,請回復您。 – Srikanth 2009-10-27 15:26:02

+0

@Jonathan:我想我找到了根本原因。 OpenSSL庫不包含在我的應用程序的make文件中。我添加了'/ usr/include/openssl $',我的應用程序正在編譯。 再次感謝您的幫助! – Srikanth 2009-10-27 15:42:01

+0

很高興你再次開始運行。 – 2009-10-27 16:58:38

相關問題