使用 <experimental/filesystem> 并调用函数的链接器错误

Posted

技术标签:

【中文标题】使用 <experimental/filesystem> 并调用函数的链接器错误【英文标题】:Linker error using <experimental/filesystem> and calling a function 【发布时间】:2017-03-14 04:14:26 【问题描述】:

我正在尝试使用实验性 c++ 文件系统编译程序,但在尝试链接我的程序时遇到了奇怪的行为。我可以创建一个 fs::path,但调用任何函数都会导致链接器错误。

我正在使用 g++.exe(i686-posix-dwarf,由 MinGW-W64 项目构建)6.1.0 在 Windows 10 上编译。

以下代码编译:

namespace fs = std::experimental::filesystem::v1;

bool utl::doesExist(const std::string& fileLocation)

    fs::path path(fileLocation);
    std::cout << path << std::endl;
    return true;

但是,当尝试使用任何功能时,我都会遇到同样的错误

bool utl::doesExist(const std::string& fileLocation)

    fs::path path(fileLocation);
    return fs::exists(fileLocation);

生成文件:

CC          = g++ 
CFLAGS      = -std=c++11 -MP -MD -fPIC

OUTPUT: 
g++ build/Engine.o ... -o bin/libquestia-eng.1.0.0.dll -L lib/SFML-2.4.2-win/lib -lsfml-audio -lsfml-network -lsfml-graphics -lsfml-window -lsfml-system -lstdc++fs -shared 

错误:

C:/MinGW/bin/../lib/gcc/i686-w64-mingw32/6.1.0/libstdc++fs.a(ops.o):(.text$_Z10_wrealpathPKwPw+0x68): undefined reference to `CreateTransaction@28'

C:/MinGW/bin/../lib/gcc/i686-w64-mingw32/6.1.0/libstdc++fs.a(ops.o):(.text$_Z10_wrealpathPKwPw+0x121): undefined reference to `CommitTransaction@4'

我认为问题可能在于目标是一个 dll,但没有多少互联网搜索为我提供了解决方案。关于此链接器错误意味着什么的任何想法?

【问题讨论】:

【参考方案1】:

看起来您需要链接的 Windows 库并未自动包含在内。链接器未找到的符号CreateTransactionCommitTransactionKtmW32.dll 中,因此您需要包含对KtmW32.lib 的引用。

【讨论】:

我在 -lstdc++fs 之后添加了 -lktmw32 并编译了它。谢谢!

以上是关于使用 <experimental/filesystem> 并调用函数的链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

何时使用 Mono<List<Object>> 以及何时使用 Flux<Object> 用于 RestController 方法

我应该使用 <colgroup> 和 <col>,如果是,为啥以及如何使用?

如何使用 Python 使用 Selenium 获取 <ul> 中的 <li> 元素列表?

<q>、<blockquote> 和 <cite> 的有效使用

使用运算符 << 将 std::strings 推送到向量中

标准库 array 的使用