make and std::logic_error



我在使用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'

关于可能导致此错误的原因以及如何修复的任何建议。

编辑从编辑的问题中,现在很清楚CMain.exe不是正在执行,而是正在构建。

同样的故事也适用(见下文),但一旦有更多的新信息,我会发布更多相关的提示。等一下


<子>

我可以打赌80%程序调用std::getenv

getenv(...)
如果从它构造一个std::string,报告的异常是预期的

在源代码中搜索getenv(…)并替换如下代码:

 std::string s = getenv("SOMEVAR");   // WRONG!

,如

 const char* raw = getenv("SOMEVAR");
 std::string s = raw?raw:"";         // RIGHT!

然后您可以使用s.empty()查看变量是否有值(您不再可以查看它是否存在于环境中,因为std::string不能表示'null' -只能表示空字符串)。


p。背景:/八卦:

我敢打赌,环境是不同的,因为环境的差异经常导致make引擎(CMake, nmake, SCons等)的麻烦/混乱,特别是SCons默认情况下非常严格:它甚至不向环境添加$HOME变量,这会破坏例如ccache/ccontrol设置。

这是一个试图从NULL指针构建的std::string

这是make程序本身的问题。报告给程序的作者。

最新更新