2011-10-24 15 views
2

とリンクするVC++の試み:cmakeのは、私が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) 

それが正常に動作し、私はWindows上でNMAKEのMakefileを生成するときfreeglut_static.libを検索します。私は静的に私のDLLにFreeGLUTリンクしようとしています:

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++をして失敗します。

LINK:致命的なエラーLNK1104: freeglut.lib以来、奇妙ではありません開いているファイル「freeglut.lib」

は、私は、生成NMAKEのメイクファイルで見ることができる場所であればどこでも言及されていないことができます。それはfreeglut_static.libとリンクしようとしているはずですが、CMakeはそれを見つけてFREEGLUT_LIBRARIESに設定します。

これは何が原因でしょうか?

答えて

2

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

+0

うん、引用符が問題だった。ありがとう! –

+0

+1私はFreeGLUTとは別のライブラリに問題があったが、私はDis答えも役に立ちました。 この問題を原因とするプラグマ行をこの回答に掲載することをお勧めします。そのため、別のlibarryで同じ問題を抱えている人は、この特定のプラグマをライブラリで検索できます。 –

関連する問題