当静态库不可用时,是不是可以从 linux 交叉编译 Windows?

Posted

技术标签:

【中文标题】当静态库不可用时,是不是可以从 linux 交叉编译 Windows?【英文标题】:Is it possible to cross compile for Windows, from linux, when static libraries are not available?当静态库不可用时,是否可以从 linux 交叉编译 Windows? 【发布时间】:2016-03-14 04:38:53 【问题描述】:

我正在尝试将使用 Qt、OpenCV 和 FlyCapture2 库的项目编译为 Windows 8 目标系统的可执行文件。我正在运行 ubuntu 14.04。不幸的是 FlyCapture2 SDK 只提供共享库,所以我不能静态编译这些。

我可以简单地将库包含在与可执行文件相同的目录中,但看看我如何在 Linux 上构建项目(使用 Qt Creator)我不确定如何正确链接 Windows 目标系统.这是我当前的 .pro 文件:

CONFIG+=static

INCLUDEPATH += /usr/local/include/
LIBS += -L/usr/local/lib -static -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio -lopencv_imgproc
LIBS += -L/usr/lib -lflycapture -lflycapture-c -lflycapturegui
## Is it possible to link to a .dll for windows here? 

是否可以链接到 Windows 目标系统的 .dll?有没有我没有看到的这个问题的解决方案?这是我第一次尝试交叉编译。感谢您的帮助,谢谢。

【问题讨论】:

【参考方案1】:

你可以试试这个: 导出 LD_LIBRARY_PATH= your_curreny_so_lib_path 然后 制作

【讨论】:

所以编译器会首先在 my_current_solib_path 中搜索库,这将在 linux 上运行,然后,在 Windows 上,它不会找到这个路径,所以在目录中找到库?对吗? 我对你的意思感到困惑。如果你能找到 .so ,你可以将它添加到 linux /usr/lib 中,linux 编译器将首先搜索 .so 。另一种方法是添加你的 .so 路径到 /etc/ld.config 与第一种方式具有相同的后果。 这如何帮助我在 Windows 上运行我的程序? .dll文件在应用程序调用时加载。你可以将你的项目编译成.exe,然后在Windows下运行,如果exe提示可以找到.dll,那么你可以将.dll文件添加到C: /Windows/system32.【参考方案2】:

您可以尝试以下方法:

LIBS += -Wl,--start-group

LIBS += -L/usr/local/lib -static -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio -lopencv_imgproc
LIBS += -L/usr/lib -lflycapture -lflycapture-c -lflycapturegui

LIBS += -Wl,--end-group

这可能对您有用。希望这会有所帮助。

【讨论】:

以上是关于当静态库不可用时,是不是可以从 linux 交叉编译 Windows?的主要内容,如果未能解决你的问题,请参考以下文章

浮动静态路由

当指向前一个节点的指针不可用时,从单个链表中删除中间节点

QT交叉编译时怎么添加静态库,急!!!

cmake:arm-xm-linux交叉编译工具链文件及交叉支持HTTPS的curl静态库

cmake:arm-xm-linux交叉编译工具链文件及交叉支持HTTPS的curl静态库

当 `this` 不可用时,从拖动回调中检索 DOM 目标