【问题标题】:Run Linux Makefile on Windows (.so file)在 Windows 上运行 Linux Makefile(.so 文件)
【发布时间】:2019-10-11 13:41:17
【问题描述】:

我正在转移到一台 Windows 计算机,并且需要运行我在 Linux 上编写的 Makefile 以创建一个库。

    HEADER=/usr/include
    INCLUDEDIR=include
    LIB_NAME=libpce.so
    SO_NAME=$(LIB_NAME).3.2
    REAL_NAME=$(SO_NAME).5
    SHARED_LIB=bin/$(REAL_NAME)

    mkdir $(HEADER)/libpce
    cp $(INCLUDEDIR)/pce.h $(HEADER)/libpce
    chmod 644 $(HEADER)/libpce/pce.h
    cp $(SHARED_LIB) /usr/lib/
    ln -f -s $(SO_NAME) /usr/lib/$(LIB_NAME)
    chmod 644 /usr/lib/$(REAL_NAME)
    ldconfig

在 windows 上通过 cygwin 终端运行它的输出给出了一个错误,因为 ldconfig 没有定义,所以我尝试在没有 ldconfig 命令的情况下运行它们。

然后,当我需要运行我的其他 Makefile 以使用参数 -lpce 编译我的代码时,它说 -lpce 未定义。我觉得 ldconfig 是必不可少的,但我无法在 Windows 上运行它。

有没有办法在 Windows 上执行这个命令?这是问题所在,还是可能是 /usr/lib/ 路径的问题?

【问题讨论】:

    标签: c++ linux windows makefile ld


    【解决方案1】:

    您的 makefile 充满了特定于 Linux 的命令和路径。他们不翻译 1:1。也许你可以把它整理出来,但真正的解决方案不是手写你的makefile。使用像cmake 这样的构建系统,无论您使用什么系统,它都会为您生成必要的构建文件。

    您也没有提及您在 Windows 机器上设置的内容。默认情况下,Windows 不具备编译 C++ 代码的功能。你必须安装一些东西,无论是MS Build ToolsWSLMinGW/MSYS2,还是Cygwin

    尽管仔细观察,您的 makefile sn-p 只不过是一个 bash 脚本。如果您最终停留在 100% Windows 环境中,这可能会被转换为 PowerShell 脚本。

    【讨论】:

    • 我正在使用 Cygwin 运行这些命令,之后配备了 g++ 来编译我的 C++ 代码。不过,我会看看 cmake 或 powershell 脚本,谢谢!
    • 我一定忽略了这个事实,我的错。
    【解决方案2】:

    ldconfig 在 cygwin 上不是必需的。

    -lpce 不说话,因为你有一个libpce.so,但链接器正在寻找一个 DLL。解决方案是创建一个符号链接:

    ln -s libpce.so libpce.dll
    

    要深入了解,请查看:

    【讨论】:

    • 我已经试过这个以及提供的链接,但我仍然得到 ld 找不到 -lpce 的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2023-02-04
    • 1970-01-01
    相关资源
    最近更新 更多