【问题标题】:Unable to run compiled C + Gtk+-3 software无法运行编译的 C+Gtk+-3 软件
【发布时间】:2018-02-16 21:53:40
【问题描述】:

目前我刚刚用 C 和 GTK + -3 创建了一个小软件,在我的机器上一切正常,但是当我在另一台笔记本电脑上测试该软件时 有几个引用 DLL 库的错误。 第一次尝试缺少 libglib-2.0-0.dll 库,然后是 libwinpthread-1.dll、libintl-8.dll、libiconv-2.dll、库,每当我添加到缺少的库时,都会出现一个新的缺少库。

我想知道是否有任何方法可以在编译时将库包含在可执行文件中?

我正在使用 mingw64.exe 进行构建,这是我当前的 makefile:

# Tools
CC=x86_64-w64-mingw32-gcc
LD=x86_64-w64-mingw32-gcc
CFLAGS=--std=c99 --pedantic -Wall -W -Wmissing-prototypes -g
LDFLAGS=
SGTKFLAGS=`pkg-config --cflags gtk+-3.0`
EGTKFLAGS=`pkg-config --libs gtk+-3.0`

# Files
EXEC=text_decoration
HEADERS=model.h view.h controller.h
MODULES=model.c view.c controller.c text_decoration.c
OBJECTS=model.o view.o controller.o text_decoration.o

# Commands
RM=rm
RMFLAGS=-f

# Start point
all:$(EXEC)

# Règle pour la génération de l'exécutable
text_decoration: $(MODULES) $(HEADERS)
    $(CC) $(SGTKFLAGS) -g -o $(EXEC) $(MODULES) $(HEADERS) $(EGTKFLAGS)

clean:
    $(RM) $(RMFLAGS) $(EXEC).exe

一时间我以为是用make命令编译的, 当我尝试使用命令 nmake 时,出现以下错误:

C:\msys64\home\Mooo\a>nmake

Microsoft (R) Program Maintenance Utility Version 14.00.24210.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        x86_64-w64-mingw32-gcc `pkg-config --cflags gtk+-3.0` -g -o text_decoration model.c view.c controller.c text_decoration.c model.h view.h controller.h `pkg-config --libs gtk+-3.0`
x86_64-w64-mingw32-gcc.EXE: error: `pkg-config: No such file or directory
x86_64-w64-mingw32-gcc.EXE: error: gtk+-3.0`: No such file or directory
x86_64-w64-mingw32-gcc.EXE: error: `pkg-config: No such file or directory
x86_64-w64-mingw32-gcc.EXE: error: gtk+-3.0`: No such file or directory
x86_64-w64-mingw32-gcc.EXE: error: unrecognized command line option '--cflags'
x86_64-w64-mingw32-gcc.EXE: error: unrecognized command line option '--libs'
NMAKE : fatal error U1077: 'C:\msys64\mingw64\bin\x86_64-w64-mingw32-gcc.EXE' : return code '0x1'
Stop.

【问题讨论】:

  • 命令替换的反引号仅在 Bourne shell 中有效; nmake 通过 Windows 命令提示符运行所有内容,这不是 Bourne shell。您必须查看 nmake 或 cmd.exe 是否提供等效语法。如果您还使用 GNU make,它可能也使用 Windows 命令提示符,但使用 GNU make 的语法是 $(shell command arguments...)
  • 即使您正确构建了它,您仍然需要将可再发行的 DLL 与您的可执行文件打包在一起。首先,您必须确定所有依赖项。
  • 一个简单的方法是构建一个PIC / static / 32bit 应用程序。然后一切都将包含在应用程序中,这样(假设所有需要的外围设备都可用)可以在使用相同类型 CPU 的任何机器上运行
  • 建议向cflags 宏添加更多标志。 -WextraWconversion。注意这个-W 关闭所有警告

标签: c dll makefile gtk nmake


【解决方案1】:

我想知道是否有任何方法可以在编译时将库包含在可执行文件中?

这意味着静态编译整个 GTK+ 堆栈以生成静态库而不是共享库。我认为这是not really supported 也不可取。

相反,如果您使用MSYS2(这是安装 GTK+ 3 的首选方式),您可以为其创建一个包,然后安装该包及其依赖项(您自己的以及 GTK+ 依赖项)在特定位置。该安装的结果是您可以重新分发并且应该是独立的。

请阅读有关GTK+ application redistristribution on Windows 的博客文章。它以 gedit 为例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多