- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 C++ 程序,我需要当前路径才能稍后创建文件夹。我的可执行文件的位置是,比如说/home/me/foo/bin
。这就是我运行的:
//Here I expect '/home/me/foo/bin/', but get ''
auto currentPath = boost::filesystem::current_path();
//Here I expect '/home/me/foo/', but get ''
auto parentPath = currentPath.parent_path();
//Here I expect '/home/me/foo/foo2/', but get 'foo2/'
string subFolder = "foo2";
string folderPath = parentPath.string() + "/" + subFolder + "/";
//Here I expect to create '/home/me/foo/foo2/', but get a core dump
boost::filesystem::path boostPath{ folderPath};
boost::filesystem::create_directories( boostPath);
我在 Ubuntu 16.04 上运行,使用随包管理器 Conan 安装的 Boost 1.66。
我曾经使用以前版本的 Boost(我相信是 1.45)成功地运行了这个,而不使用 Conan。 Boost 通常安装在我的机器上。我现在在运行 create_directories( boostPath);
时获得核心转储。
两个问题:
current_path()
不向我提供实际路径,而是返回空路径?sudo
运行它,我仍然会有核心转储?难道我不应该简单地在根目录下创建文件夹吗?编辑:
运行编译后的程序,在行之间放置上述变量的一些 cout
输出而不是使用 Debug模式,通常会给出以下输出:
currentPath: ""
parentPath: ""
folderPath: /foo2/
Segmentation fault (core dumped)
但是有时(大约 20% 的时间)会给出以下输出:
currentPath: "/"
parentPath: "/home/me/fooA�[oFw�[oFw@"
folderPath: /home/me/fooA�[oFw�[oFw@/foo2/
terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
what(): boost::filesystem::create_directories: Invalid argument
Aborted (core dumped)
编辑2:
运行conan profile show default
我得到:
[settings]
os=Linux
os_build=Linux
arch=x86_64
arch_build=x86_64
compiler=gcc
compiler.version=5
compiler.libcxx=libstdc++
build_type=Release
[options]
[build_requires]
[env]
最佳答案
依赖项中使用的 libcxx
与您用于构建应用程序的 libcxx 之间存在一些差异。
在 g++ (linux) 中,您可以使用 2 种标准库模式:libstdc++
(在未启用 C++11 的情况下构建)和 libstdc++11
(使用 C++11 构建)启用 C++11。当您构建可执行文件(应用程序或共享库)时,链接在一起的所有单独库必须链接到相同的libcxx
。
libstdc++11
已成为 g++ >= 5 的默认值,但这也取决于 Linux 发行版。碰巧的是,即使你在 Ubuntu 14 等较旧的发行版中安装了 g++ >=5,默认的 libcxx 仍然是 libstdc++ ,显然如果不升级它并不容易。打破。开源中使用的非常流行的 CI 服务(例如 travis-ci)也恰好使用较旧的 Linux 发行版,因此 libstdc++
链接是最受欢迎的。
libstdc++
是 g++ < 5 的默认值。
出于历史和向后兼容性的原因,conan 默认配置文件始终使用 libstdc++
,即使对于现代发行版中的现代编译器也是如此。您可以在第一次执行 conan 时读取默认配置文件,也可以在 .conan/profiles/default
中以文件形式找到它,或者使用 conan profile show default
显示它。这可能会在 conan 2.0(甚至更早)中发生变化,并且如果可能的话,将为每个编译器检测到正确的 libcxx
。
因此,如果您不更改默认配置文件(建议在生产中使用您自己的配置文件),那么当您执行 conan install
时,安装的依赖项是针对 libstdc++ 构建的
。请注意,在大多数情况下,此 conan install
独立于构建,它只是使用请求的配置(来自默认配置文件)下载、解压缩并配置所需的依赖项。
然后,当你构建时,如果你不改变 _GLIBCXX_USE_CXX11_ABI ,那么您可以使用系统默认编译器,在本例中为 libstdc++11
。在大多数情况下,会出现链接错误来显示这种差异。但就您而言,您很不幸,您的应用程序成功链接,但随后在运行时崩溃了。
有几种方法可以解决这个问题:
libstdc++
构建您的应用程序。确保定义_GLIBCXX_USE_CXX11_ABI=0
。libstdc++11
的依赖项。编辑您的默认配置文件以使用 libstdc++11
,然后发出新的 conan install
并重建您的应用。关于c++11 - boost::filesystem::current_path() 返回空路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52147033/
我已经为使用 JGroups 编写了简单的测试。有两个像这样的简单应用程序 import org.jgroups.*; import org.jgroups.conf.ConfiguratorFact
我有一个通过 ajax 检索的 json 编码数据集。我尝试检索的一些数据点将返回 null 或空。 但是,我不希望将那些 null 或空值显示给最终用户,或传递给其他函数。 我现在正在做的是检查
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why does one often see “null != variable” instead of “
嗨在我们公司,他们遵循与空值进行比较的严格规则。当我编码 if(variable!=null) 在代码审查中,我收到了对此的评论,将其更改为 if(null!=variable)。上面的代码对性能有影
我正在尝试使用 native Cordova QR 扫描仪插件编译项目,但是我不断收到此错误。据我了解,这是代码编写方式的问题,它向构造函数发送了错误的值,或者根本就没有找到构造函数。那么我该如何解决
我在装有 Java 1.8 的 Windows 10 上使用 Apache Nutch 1.14。我已按照 https://wiki.apache.org/nutch/NutchTutorial 中提
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: what is “=null” and “ IS NULL” Is there any difference bet
Three-EyedRaven 内网渗透初期,我们都希望可以豪无遗漏的尽最大可能打开目标内网攻击面,故,设计该工具的初衷是解决某些工具内网探测速率慢、运行卡死、服务爆破误报率高以及socks流
我想在Scala中像在Java中那样做: public void recv(String from) { recv(from, null); } public void recv(String
我正在尝试从一组图像补丁中创建一个密码本。我已将图像(Caltech 101)分成20 X 20图像块。我想为每个补丁创建一个SIFT描述符。但是对于某些图像补丁,它不返回任何描述符/关键点。我尝试使
我在验证器类中自动连接的两个服务有问题。这些服务工作正常,因为在我的 Controller 中是自动连接的。我有一个 applicationContext.xml 文件和 MyApp-servlet.
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭10 年前。 问题必须表现出对要解决的问题的最低程度的了解。告诉我们您尝试过做什么,为什么不起作用,以
大家好,我正在对数据库进行正常的选择,但是 mysql_num_rowsis 为空,我不知道为什么,我有 7 行选择。 如果您发现问题,请告诉我。 真的谢谢。 代码如下: function get_b
我想以以下格式创建一个字符串:id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&等,在for循环中,我得到
我正在尝试使用以下代码将URL转换为字符串: NSURL *urlOfOpenedFile = _service.myURLRequest.URL; NSString *fileThatWasOpen
我正在尝试将NSNumber传递到正在工作的UInt32中。然后,我试图将UInt32填充到NSData对象中。但是,这在这里变得有些时髦... 当我尝试将NSData对象中的内容写成它返回的字符串(
我正在进行身份验证并收到空 cookie。我想存储这个 cookie,但服务器没有返回给我 cookie。但响应代码是 200 ok。 httpConn.setRequestProperty(
我认为 Button bTutorial1 = (Button) findViewById(R.layout.tutorial1); bTutorial1.setOnClickListener
我的 Controller 中有这样的东西: model.attribute("hiringManagerMap",hiringManagerMap); 我正在访问此 hiringManagerMap
我想知道如何以正确的方式清空列表。在 div 中有一个列表然后清空 div 或列表更好吗? 我知道这是一个蹩脚的问题,但请帮助我理解这个 empty() 函数:) 案例)如果我运行这个脚本会发生什么:
我是一名优秀的程序员,十分优秀!