cmake add_library不初始化静态全局变量

时间:2019-09-03 07:08:27

标签: c++ cmake

我有两个源文件,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显然做了我意想不到的事情。

1 个答案:

答案 0 :(得分:0)

事实证明,可以使用 protected void lnkTest_Click(object sender, EventArgs e) { GridViewRow gvr = (GridViewRow)((Control)sender).Parent.Parent; HiddenField hdnId = (HiddenField)gvr.FindControl("hdnId"); Response.Redirect("frmTest.aspx?Id=" + Convert.ToString(hdnId.Value) + "&DropDownId=" + ddlTest.SelectedValue, false); } 来避免这种情况。例如写这样:

-Wl,--whole-archive