捆绑后的Gtk_file_chooser_dialog崩溃应用

时间:2019-07-18 16:23:09

标签: c++ macos cmake gtk3 gdkpixbuf

我有一个带有cmake的简单应用,该应用在make步骤运行良好,但在make安装后崩溃。

在两个阶段都使用otool,我意识到该应用程序在make阶段使用/ usr / local / Cellar库,但是在make install之后以某种方式开始使用/ usr / local / opt库。

这是cpp文件:

#include <gtk/gtk.h>
#include <string>
#include <iostream>
#include <stdio.h>

static void destroy(GtkWidget *widget, gpointer data)
{
    gtk_main_quit();
}

static void buttonClicked(GtkWidget *button, GtkWidget *window)
{
  std::string path;
  GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
  gint res;
  char *filename;
  GtkWidget *dialog;
  GtkFileChooser *chooser;

  dialog = gtk_file_chooser_dialog_new("Open File", GTK_WINDOW(window), action, "_Cancel", GTK_RESPONSE_CANCEL, "_Open", GTK_RESPONSE_ACCEPT, NULL);

  res = gtk_dialog_run(GTK_DIALOG(dialog));
  if (res == GTK_RESPONSE_ACCEPT)
    {
      chooser = GTK_FILE_CHOOSER(dialog);
      filename = gtk_file_chooser_get_filename(chooser);
      path = filename;
      std::cout<<path<<std::endl;
      g_free(filename);
    }

  gtk_widget_destroy(dialog);
}

int main(int argc, char *argv[])
{
    GtkWidget *window, *area, *button, *buttonLabel;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_size_request(window, 80, 36);

    gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
    g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL);
    area = gtk_fixed_new ();
    gtk_container_add(GTK_CONTAINER (window), area);

    button = gtk_button_new_with_label((gchar *)"Open File Explorer");
    buttonLabel = gtk_bin_get_child(GTK_BIN(button));
    gtk_label_set_markup(GTK_LABEL(buttonLabel), "<b>Open File Explorer</b>");
    gtk_widget_set_size_request(button, 80, 18);
    gtk_fixed_put(GTK_FIXED(area), button, 40, 0);
    g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(buttonClicked), window);

    gtk_widget_show_all(window);
    gtk_main();
}

//g++ `pkg-config --libs --cflags gtk+-3.0` -g -w -o makeInstallError main.cpp && ./makeInstallError

,这里是CMakeList:

######################################################################
##
### Commentary:
##  Link error make install - osx
##
######################################################################
##
### Code:

cmake_minimum_required(VERSION 3.0)

######################################################################

project(makeInstallError)

## ###################################################################
## Version setup
## ###################################################################

set(${PROJECT_NAME}_VERSION_MAJOR 0)
set(${PROJECT_NAME}_VERSION_MINOR 1)
set(${PROJECT_NAME}_VERSION_PATCH 0)
set(${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH})

## ###################################################################
## Output directory setup
## ###################################################################

include(GNUInstallDirs)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)

## ###################################################################
## Dependencies
## ###################################################################

find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
add_definitions(${GTK3_CFLAGS_OTHER})

## ###################################################################
## Build rules
## ###################################################################

add_executable(${PROJECT_NAME} MACOSX_BUNDLE main.cpp)
target_link_libraries(${PROJECT_NAME} ${GTK3_LIBRARIES})

## ###################################################################
## Bundle setup
## ###################################################################

set(${PROJECT_NAME}_RESOURCE_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.app/Contents/Resources)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${${PROJECT_NAME}_RESOURCE_DIR})
#COMMAND ${CMAKE_COMMAND} ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.icns ${${PROJECT_NAME}_RESOURCE_DIR})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.plist.in ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.plist)
set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.plist)
install(CODE "
include(BundleUtilities)
set(BU_CHMOD_BUNDLE_ITEMS TRUE)
fixup_bundle(${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.app \"\" \"\")" DESTINATION bin)

######################################################################
### CMakeLists.txt ends here
######################################################################

这里是plist。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleExecutable</key>
    <string>@PROJECT_NAME@</string>
    <key>CFBundleGetInfoString</key>
    <string></string>
    <key>CFBundleIconFile</key>
    <string>@PROJECT_NAME@</string>
    <key>CFBundleIdentifier</key>
    <string>fr.fod.@PROJECT_NAME@</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleLongVersionString</key>
    <string>@makeInstallError_VERSION@</string>
    <key>CFBundleName</key>
    <string>@PROJECT_NAME@</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>@makeInstallError_VERSION@</string>
    <key>CFBundleVersion</key>
    <string>@makeInstallError_VERSION@</string>
    <key>CSResourcesFileMapped</key>
    <true/>
    <key>NSHumanReadableCopyright</key>
    <string>Fod</string>
    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
    <key>NSHighResolutionCapable</key>
    <true/>
</dict>
</plist>

使用conda的同事可以正常工作。我不知道如何修复我的环境,或者不知道如何手动设置库的指令。

编辑: 卸载brew /安装了Anaconda,然后glib,gtk3,pkg-config,cmake,intltool也从源代码构建了gsettings-desktop-schemas:仍然没有运气。 我仍然遇到此错误 GLib-GIO-ERROR **:12:09:19.151:系统上未安装GSettings模式

感谢您的帮助。

0 个答案:

没有答案