【发布时间】:2018-02-08 04:09:43
【问题描述】:
我在一个目录中有 3 个文件。我将构建ll.cc 到libmylib.so,并将main.cc 构建到myexe。
使用这些命令构建
g++ -Wall -g -fPIC -std=c++11 ll.cc -shared -o libmylib.so
g++ -Wall -g -std=c++11 main.cc -L. -lmylib -o myexe
但是,g++编译时报错myexe:
./libmylib.so: undefined reference to `submarinex::LIB::kCount'
collect2: error: ld returned 1 exit status
文件:
ll.h
namespace submarinex {
class LIB {
public:
void Print();
private:
static const int kCount = 100;
};
} // namespace submarinex
ll.cc
#include "ll.h"
#include <algorithm>
#include <iostream>
namespace submarinex {
void LIB::Print() {
int min = std::min(101, kCount);
std::cout << min << std::endl;
// std::cout << kCount << std::endl;
}
} // namespace submarinex
main.cc
#include "ll.h"
int main(int argc, char **argv) {
submarinex::LIB lib;
lib.Print();
return 0;
}
Case 1:
如果在Print中使用这两行,main.cc的链接对象会报错
int min = std::min(101, kCount);
std::cout << min << std::endl;
Case 2:
如果在Print中使用这一行,会成功
std::cout << kCount << std::endl;
如果改变
static const int kCount = 100;
到
const int kCount = 100;
无论使用Case1 或Case2 都可以。
我不知道如何解决这个问题。
【问题讨论】:
标签: c++ c++11 build compilation gcc4.9