我在Windows上的应用程序中使用娜娜图书馆已经有一段时间了,它工作得很好。现在,我正在尝试进行Linux构建,但我似乎无法正确地将nana链接到我的应用程序。
我试过这,但它似乎也不起作用
我举了一个小例子来说明这个问题。这是我的main.cpp
#include <nana/gui/filebox.hpp>
#include <iostream>
int main()
{
nana::filebox picker{nullptr, true};
auto paths = picker.show();
if(paths.empty())
{
std::cout<<"Cancelled"<<std::endl;
}
else
{
for(auto & p : paths)
std::cout << "Selected file:" << p << std::endl;
}
}我的CMakeList看起来是这样的:
cmake_minimum_required(VERSION 3.0.0)
project(NanaTest VERSION 0.1.0)
include(CTest)
enable_testing()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall")
#set(CMAKE_LINK_WHAT_YOU_USE TRUE)
add_executable(NanaTest main.cpp)
target_include_directories(NanaTest PRIVATE
usr/local/include/nana)
find_library(NANALIB NAMES libnana.a REQUIRED PATHS usr/local/lib/)
if(NOT NANALIB)
message([FATAL_ERROR] "NANALIB not found")
endif()
target_link_libraries(NanaTest ${NANALIB})
#target_link_libraries(${PROJECT_NAME} -lnana)
target_link_libraries(${PROJECT_NAME} -lX11)
target_link_libraries(${PROJECT_NAME} -lXcursor)
target_link_libraries(${PROJECT_NAME} -lpthread )
target_link_libraries(${PROJECT_NAME} -lXft )
target_link_libraries(${PROJECT_NAME} -lfontconfig )
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)我跑步的时候这似乎很管用。但是,当我将它复制到另一个VM时,它不起作用。而且,ldd结果似乎不包含共享对象libnana.so。当我在另一个VM上运行它时,我会得到分段错误,当我在gdb上运行它时,这就是我得到的错误:
Program received signal SIGSEGV, Segmentation fault.
0x0000555555b80a21 in nana::detail::platform_spec::platform_spec() ()当我取消评论set(CMAKE_LINK_WHAT_YOU_USE TRUE) and target_link_libraries(${PROJECT_NAME} -lnana)时
我可以在ldd结果中看到libnana.so,但是这一次当应用程序结束时,我会得到一个double free or corruption (!prev) Aborted (core dumped)错误。有人知道问题可能是什么吗。我在用GCC 9.3.0。提前谢谢你。顺便说一下,我正在使用nana-hotfix-1.7.4,但是我尝试了1.7.1、1.7.2和1.7.3,它们都有相同的问题。
发布于 2021-08-18 01:28:12
下面是一个实际工作的构建:
cmake_minimum_required(VERSION 3.21)
project(NanaTest VERSION 0.1.0)
include(FetchContent)
FetchContent_Declare(
nana
GIT_REPOSITORY https://github.com/cnjinhao/nana.git
GIT_TAG v1.7.4
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(nana)
add_executable(NanaTest main.cpp)
target_link_libraries(NanaTest PRIVATE nana)nana开发人员,希望您在构建中包含他们的源代码。最简单的方法是通过FetchContent。
https://stackoverflow.com/questions/68813991
复制相似问题