我正在嘗試構建一個靜態庫作為其他人可以使用的版本(無論他們是否除錯自己的代碼,他們都應該能夠使用它)。另一方面,我的庫不應該包含任何除錯符號等。我只想釋放頭檔案和 .lib 檔案(沒有 .dll 左右)。
lib 的用戶應該能夠輕松使用他的運行時環境和構建風格(除錯或發布)。
這甚至可以使用 Visual Studio 嗎?
[==> 我已經讀過,有些用戶切換到用 gcc 構建這種庫]
我已經嘗試了幾種情況,但我總是遇到類似“_ITERATOR_DEBUG_LEVEL”沖突之類的問題。運行時庫的靜態鏈接似乎也不是解決方案,但還有什么?是否可以關閉所有參考并讓包含庫的專案決定使用什么運行時?
即使這個問題類似于以下問題,我也沒有在那里找到正確答案: Pure static C Library (no dependency of MSVC C runtime) 或這里 Microsoft Visual Studio ~ C/C Runtime Library ~ Static/dynamic linking
uj5u.com熱心網友回復:
解決方案如下(如@drescherjm 和@Eljay 所述):
如果僅使用“C ABI”并向“外部”(頭檔案)公開,則可以使用 VisualStudio(當前為 VS2019)構建可在除錯和發布環境中使用的靜態庫(.lib 檔案)。
“C ABI”并不意味著不能使用 C 功能,它意味著沒有“std::*”函式/容器/等。可能用過了。
既不作為函式引數也不作為類成員。
#ifndef LIB_STATIC_H__
#define LIB_STATIC_H__
#include <stdint.h>
class MyLib
{
public:
MyLib();
~MyLib();
uint64_t TestFunc(char* param, uint32_t x);
};
#endif
這會起作用,但這不是:
#ifndef LIB_STATIC_H__
#define LIB_STATIC_H__
#include <stdint.h>
#include <string>
class MyLib
{
public:
MyLib();
~MyLib();
uint64_t TestFunc(char* param, uint32_t x);
private:
std::string m_MyString;
};
#endif
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372739.html
