链接器错误使用<experimental filesystem =“”>并调用函数

时间:2017-03-14 04:14:27

标签: c++ gcc c++17

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

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

以下代码编译:

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 个答案:

答案 0 :(得分:1)

看起来你需要链接的窗口库没有被自动包含。链接器未找到的符号CreateTransactionCommitTransaction位于KtmW32.dll中,因此您需要包含对KtmW32.lib的引用。