使用make时遇到以下错误。因此,我在命令行编译了相同的程序,以检查我的C ++代码中是否存在问题,但它在命令行上完全正常。
g++ -o Cmain.exe Cmain.o -lmysqlclient -lboost_date_time -L ../lib -L/usr/local/lib -L/usr/lib/mysql
./Cmain.exe
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct NULL not valid
make: *** [Cmain.exe] Aborted
make: *** Deleting file `Cmain.exe'
有关可能导致此错误的原因及其修复方法的任何建议。
答案 0 :(得分:3)
编辑,现在很清楚CMain.exe没有被执行,而是被构建。
同样的情况适用(见下文),但一旦有更多新信息,我会发布更多相关提示。坚持
<子> 子>
我可以打赌80%的程序会调用std::getenv
getenv(...)
并且不检查null(0)的返回值。如果然后从中构造一个std :: string,则报告的异常是 expected 。
在源代码中搜索getenv(...)并替换代码,例如:
std::string s = getenv("SOMEVAR"); // WRONG!
by,例如
const char* raw = getenv("SOMEVAR");
std::string s = raw?raw:""; // RIGHT!
然后,您可以使用s.empty()
查看变量是否具有值(您无法再查看它是否存在于环境中,因为std :: string不能表示'null' - 只有空字符串)。
PS。:背景/偏离主题:
我敢打赌,由于环境差异,环境不同 经常引起麻烦/混淆make引擎(CMake,nmake,SCons等)特别是SCons默认是非常严格的:它甚至不向环境添加$ HOME变量,例如ccache / ccontrol设置。
答案 1 :(得分:2)
尝试使用NULL指针构建std::string
。
答案 2 :(得分:-2)
这是make程序本身的一个问题。将其报告给该计划的作者。