簡體   English   中英

cmake add_library不初始化靜態全局變量

[英]cmake add_library doesn't initialize static global variable

我有兩個源文件,main.cc,foo.cc。

#include <iostream>

using namespace std;

int main() {

    cout << "main\n";
}

foo.cc

#include <iostream>

using namespace std;

class foo {
public:
    foo() {
        cout << "foo ctor\n";
    }
};

static foo foo_obj;

當我這樣手動編譯時:

$ g ++ -c foo.cc -o libfoo.a

$ g ++ main.cc libfoo.a -o main

$ ./main

foo ctor

主要

但是當我使用cmake時,它不會打印foo ctor 這是CMakeLists.txt:

cmake_minimum_required(VERSION 3.2)

set(CMAKE_CXX_FLAGS "-std=c++11")

add_library(foo STATIC foo.cc)

add_executable(main main.cc)
target_link_libraries(main foo)

顯然,cmake已經完成了一些我沒想到的事情。

事實證明,可以使用-Wl,--whole-archive避免這種情況。 例如寫這樣:

target_link_libraries(main 
  "-Wl,--whole-archive"
  foo
  "-Wl,--no-whole-archive"
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM