我有一个带有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模式
感谢您的帮助。