2

FreeGLUTを見つけるためのCMakeモジュールがあります:

FIND_PATH(FREEGLUT_INCLUDE_DIR NAMES GL/freeglut.h)
FIND_LIBRARY(FREEGLUT_LIBRARY NAMES freeglut freeglut_static)

SET(FREEGLUT_LIBRARIES ${FREEGLUT_LIBRARY})
SET(FREEGLUT_INCLUDE_DIRS ${FREEGLUT_INCLUDE_DIR})

INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(FreeGLUT DEFAULT_MSG FREEGLUT_LIBRARY FREEGLUT_INCLUDE_DIR)

MARK_AS_ADVANCED(FREEGLUT_INCLUDE_DIR FREEGLUT_LIBRARY)

これは正常にfreeglut_static.lib動作し、WindowsでNMakeMakefileを生成すると検出されます。FreeGLUTをDLLに静的にリンクしようとしています。

FIND_PACKAGE(FreeGLUT REQUIRED)

ADD_LIBRARY(vti SHARED ${VTI_SOURCES})
ADD_DEFINITIONS("-DBUILD_VTI=1 -DFREEGLUT_STATIC=1")
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${FREEGLUT_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(vti ${FREEGLUT_LIBRARIES})

私のソースコードは正しくビルドされますが、リンク段階に達すると、VC++は次のように失敗します。

リンク:致命的なエラーLNK1104:ファイル'freeglut.lib'を開くことができません

freeglut.lib生成されたNMakemakefileで見ることができるどこにも言及されていないので、これは奇妙です。freeglut_static.libCMakeが見つけて設定するとリンクしようとしているはずFREEGLUT_LIBRARIESです。

これを引き起こしているのは何ですか?

4

1 に答える 1

2

これはpragma、FreeGLUTコードのディレクティブが原因で発生します(freeglut_std.hを参照)。FREEGLUT_STATICを使用すると、実際に修正されるはずですが、引用符なしでCMakeに渡す必要があると思います。ADD_DEFINITIONS(-DBUILD_VTI -DFREEGLUT_STATIC)

于 2011-10-24T23:33:41.440 に答える