- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想从这个 site 编译一个示例代码(在底部)。我下载了 GLFW 3.0.4 源代码并将其构建在自定义位置。我使用了默认设置,GLFW 被构建为静态库。我的 CMakeLists.txt 看起来像这样:
cmake_minimum_required(VERSION 2.8)
project(glfw_test_project)
SET(CMAKE_CXX_FLAGS "-Wall -Werror -g -std=c++11")
find_package(OpenGL REQUIRED)
include_directories(/home/user/MyLibs/OpenGL/glfw-3.0.4/include)
link_directories(/home/user/MyLibs/OpenGL/glfw-3.0.4/build/src)
add_executable(glfw_test main.cpp)
target_link_libraries(glfw_test ${OPENGL_gl_LIBRARY})
target_link_libraries(glfw_test glfw3)
当我运行 make 时,我得到以下信息:
Linking CXX executable glfw_test
/usr/bin/ld: /home/user/MyLibs/OpenGL/glfw-3.0.4/build/src/libglfw3.a(x11_clipboard.c.o): undefined reference to symbol 'XConvertSelection'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [glfw_test] Error 1
make[1]: *** [CMakeFiles/glfw_test.dir/all] Error 2
make: *** [all] Error 2
怎么了?
编辑1当我将 GLFW 构建为动态库时,一切正常。然后我的 CMakeLists.txt 中的最后一行必须替换为:
target_link_libraries(glfw_test glfw)
使用静态库有什么问题?
最佳答案
我在 Ubuntu 14.04 LTS 上遇到了同样的问题。
第一:错误添加符号:命令行中缺少 DSO
显示链接器命令行参数的错误顺序。这post让我意识到这一点。您需要调用 $ make VERBOSE=1
来查看链接器调用并亲眼检查。请记住:TARGET_LINK_LIBRARIES()
应该是您的 CMakeLists.txt
中的最后一个命令并查看此 order explanation .
第二:如果您针对静态 GLFW3 库进行构建,则所有 X11 库都不会自动添加到您的链接器调用中,如上文 atsui 所示。在GLFW-Documentation您可以找到适合您需要的 cmake 变量:${GLFW_STATIC_LIBRARIES}
。要使用它并启用更自动化的构建过程,让 pkg-config
找到 X11 库的所有依赖项:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(myProject)
FIND_PACKAGE( PkgConfig REQUIRED )
pkg_search_module( GLFW3 REQUIRED glfw3 ) # sets GLFW3 as prefix for glfw vars
# now ${GLFW3_INCLUDE_DIR}, ${GLFW3_LIBRARIES} and ${GLFW3_STATIC_LIBRARIES}
# are set
INCLUDE_DIRECTORIES( ${GLFW3_INCLUDE_DIR} )
ADD_EXECUTABLE( myProject mySource.cpp )
TARGET_LINK_LIBRARIES( myProject ${GLFW_STATIC_LIBRARIES} )
# they include X11 libs
现在使用 $ make VERBOSE=1
再次检查链接器库参数,您应该会发现更多 X11 库,例如:-lXrandr -lXi -lXrender -ldrm -lXdamage -lXxf86vm -lXext -lX11
和 -lpthread
。
第三:当链接到共享库时,对 X11 等的依赖是动态解析的。这就是为什么您不需要显式地将 X11 库标志添加到链接器的原因。在这种情况下,您只需要:TARGET_LINK_LIBRARIES(我的项目 ${GLFW_LIBRARIES})
第四:发生在我身上,一些 glfwCommands 有 undefined reference to
- 链接器错误。我发现,我在 /usr/local/lib
中安装了 GLFW3,但链接器只获得了 LD_LIBRARY_PATH
环境变量,该变量仅设置为 /usr/lib32
。添加参数-L/usr/local/lib
解决引用问题。为了避免将来出现这种情况,我设置了 LD_LIBRARY_PATH=/usr/lib32;/usr/local/lib;
。
提示:检查您的 GLFW cmake 变量中有哪些值,在构建期间打印它们:
FOREACH(item ${GLFW3_STATIC_LIBRARIES})
MESSAGE(STATUS " using lib: " ${item})
ENDFOREACH()
关于opengl - GLFW - UBuntu 14.04 LTS 上的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345384/
GLFW 首字母缩写词代表什么? http://www.glfw.org/是主要网站,但我在那里找不到任何线索。 Evenhere on SO 它有一个标签,但在描述中没有解释首字母缩略词。 最佳答案
我正尝试在我的 mac 上使用 xcode 使用 glfw 2.7.5,但出现以下错误: Undefined symbols for architecture i386: "_glfwGetKey
当我们必须运行多线程glfw应用程序时,如果在MainProcess中调用了glfw.create_window(),程序将停止。 这基本上是更大代码的一部分,我无法更改架构(包括多处理架构),但这是
如何使用 glfw 检测小写字母?我可以检测大写字母。例如, if ( key == 'A' && action == GLFW_PRESS ) std::cout << (char)
如何使用 glfw 检测小写字母?我可以检测大写字母。例如, if ( key == 'A' && action == GLFW_PRESS ) std::cout << (char)
我正在尝试将 GLFW 用于学校项目,并遵循了以下步骤: 1) 从 glfw.org 下载 win32 zip 2) 将/include 添加到我的解决方案的 includes 3) 将/lib-ms
我已经完成了以下视频 https://www.youtube.com/watch?v=shpdt6hCsT4 但是,我的世界窗口看起来像这样: http://s1303.photobucket.com
当我使用 GLFW 创建窗口(在 Windows 操作系统上)并通过 glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, 1); 将 GLFW_TRANSPARE
我一直在试图让我的窗口可拖动。 这是我的代码, #include #include #include #include "include/GLFW/glfw3.h" void cursor_po
我在识别我机器上的 GLFW 库的代码块 10.05 时遇到了一些困难。当我创建一个空项目并复制粘贴此 GLFW 教程中的代码时 >> http://content.gpwiki.org/index.
在我寻找跨平台框架/库的过程中,GLFW 被多次提及。所以,我决定尝试一下。现在,似乎我什至无法启动窗口。 :-/ #include #include #include int main(int ar
我想将 OpenGL 图形绘制到多个窗口中。据我所知,所有窗口都“通向”同一个“世界”: 在窗口之间共享上下文。这对 GLFW 来说是非常简单的任务,我在这方面取得了一些进展,但是,代码变得越来越模糊
最近我开始了一个涉及 GLFW(64 位,带有 GLEW)的项目。但是,我似乎无法让它正确链接。我的设置方式如下: 操作系统:Windows 8 64位 编译器:mingw64 集成开发环境:ecli
我想将 OpenGL 图形绘制到多个窗口中。据我所知,所有窗口都“通向”同一个“世界”: 在窗口之间共享上下文。这对 GLFW 来说是非常简单的任务,我在这方面取得了一些进展,但是,代码变得越来越模糊
标题已经说明了一切。使用 C 语言的 GLFW 库,我怎样才能防止窗口宽度低于 20 像素,或者 10。怎样才能防止高度不超过 100?我尝试为窗口大小调整时创建一个回调函数,如下所示: void w
所以基本上是从页面上的教程学习 OpenGL 和 GLFW 库:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-6-keyboa
我正在用 OpenGL 和 GLFW 编写游戏引擎。但是,不知何故我的窗口无法关闭。我尝试了很多东西,但没有效果。我的代码有什么问题? 我找不到其中的错误 - 我觉得一切都很好。 代码: int ru
我在创建 GLFW 窗口时遇到了一些问题。我想要一个能够在窗口模式和全屏模式之间切换的程序。要在 GLFW 2.7.8 中执行此操作,必须首先销毁事件窗口,然后创建一个新窗口。我读到 3.0 版支持多
在 GLFW 中设置回调函数时要使用什么数据类型? 我尝试设置一个函数来键入 void,但给我一个编译错误。将其更改为 void __stdcall 会给我一个 RT 错误,但我如何使用 GLFW 的
为了让结果保持打开状态(窗口屏幕),我必须执行以下操作: while (glfwGetWindowParam(GLFW_OPENED)) { // do some stuff glDr
我是一名优秀的程序员,十分优秀!