2015-02-09 43 views
0

我正在嘗試基於asmJit構建示例項目。使用Cmake構建asmJit示例

我具有以下設置 AsmTest

  • main.cpp中
  • 的CMakeLists.txt
    • asmjit(內側是從GitHub庫的CmakeList.txt)。
    • 的CMakeLists.txt(內容:add_subdirectory(asmjit))
  • 構建

我第一次的CMakeLists.txt的內容是:

cmake_minimum_required(VERSION 2.8) 
project(asmJitTest) 

add_subdirectory(libs) 
include_directories(${asmJitTest_SOURCE_DIR} ${asmJitTest_SOURCE_DIR}/libs/asmjit/src) 
add_executable(JitTest main.cpp) 
target_link_libraries(JitTest asmjit) 

我能成功地打造這個項目,獲得視覺工作室解決方案。 但是,如果我嘗試在視覺工作室中運行它,則會出現像這樣的各種「未解決的外部錯誤」。

1 error LNK2001: unresolved external symbol "struct asmjit::X86RegData 
    const asmjit::x86RegData" ([email protected]@@[email protected]@B) main.obj JitTest 

我不明白爲什麼我會出現鏈接錯誤。 我是cmake的新手,並且從頭開始整個構建過程。 有人能請我指出正確的方向嗎?

回答

2

可以編譯asmjit作爲一個動態鏈接庫,你可以做到這一點簡單的包含您的CMake的腳本中的CMakeLists.txt

Set(ASMJIT_DIR "/relative/dir/to/your/asmjit") 
Include("${ASMJIT_DIR}/CMakeLists.txt") 

# AsmJit should have already taken care of include directories, if you 
# are not sure you can add it, but shouldn't be necessary. 
Include_Directories(${ASMJIT_DIR}) 

# Then in your target you should be able to use: 
Target_Link_Libraries(YourTarget asmjit ${ASMJIT_DEPS}) 

另外,我發現這是嵌入asmjit作爲更可靠一個靜態庫,將整個asmjit嵌入到您的項目中。 AsmJit具有一個內置支持:

# Tell asmjit that it will be embedded. 
Set(ASMJIT_EMBED TRUE) 
Add_Definitions(-DASMJIT_STATIC) 

Set(ASMJIT_DIR "/relative/dir/to/your/asmjit") 
Include("${ASMJIT_DIR}/CMakeLists.txt") 

# If you add a library/executable, include asmjit sources. 
Add_Executable(YourTarget main.cpp ${ASMJIT_SRC}) 

# You still have to include asmjit dependencies. 
Target_Link_Libraries(YourTarget ${ASMJIT_DEPS}) 

第二種方法比建設asmjit一分大優勢動態或靜態,它可以嵌入到一個動態鏈接庫,而無需Linux和所有下的問題這樣需要你使用-fPIC的平臺,因爲默認情況下cmake不會將-fPIC放入靜態庫構建中,但是這將用於更長時間的討論,並且它與您的問題沒有關係。

+0

謝謝我編譯它爲靜態庫文件,現在它的工作。 – 2015-02-10 08:35:40