2017-09-16 100 views
0

私はこのプロジェクトでPybind11とCMakeを使用している古いC++ライブラリを公開しています。 C++ライブラリは、ここでは "problematic_old_library.lib"というファイルとリンクしています。この.libはサーバードライブ上にあります。 C++コードをPythonにバインドするときは、インクルードと必要なファイルへのリンクを含むCMakeList.txtファイルが必要です。私はCMakeの経験がないので、私はここで何か間違っていると確信しています。ここでC++ CMakeリンクエラー:LNK1181:入力ファイル "x.lib"を開くことができません

は参照のための私のCMakeList.txtファイル(ファイルの名前が変更されている)である:今

cmake_minimum_required(VERSION 2.8.12) 
project(some_project) 

add_subdirectory(pybind11) 

pybind11_add_module(some_project 
    src/main.cpp 
    src/mapping.cpp 
    ) 
link_directories(Z:/folder/subfolder/lib) 
TARGET_LINK_LIBRARIES(some_project PUBLIC problematic_old_library) 

、このCMakeList.txtは「some_project」という名前のフォルダに含まれています。フォルダ "some_project"の中に "CMakeList.txt"と "src"という名前のフォルダ(上記の2つのファイル)があります。 "mapping.cpp"ファイルには "problematic_old_library"という名前のサードパーティライブラリが使用されています。この?

が、私はドキュメントからのヘルプを検索してみました。しかし、私はCMakeのを使用している場合、それは非常に混乱$ {何か}表記を理解することがわかります。私は何をだろう引き起こしている何

LINK: fatal error LNK1181: cannot open input file 'problematic_old_library.lib'

好きなのは、可能であれば、$ {something}表記なしで古いライブラリとリンクする方法の "ハードコーディング"の例です。

/////////////

この問題のある「x.lib」につながるパスのすべての組み合わせを含む、CMakeList.txtファイルの追加バージョンを次に示します"ファイル:

make_minimum_required(VERSION 2.8.12) 
project(blpbind) 

add_subdirectory(pybind11) 


pybind11_add_module(blpbind src/main.cpp 

    src/mapping.cpp 

    ) 

# Cannot open 
#link_directories("Z:\\blpapi_cpp\\lib") 

# Cannot open 
#link_directories("Z://blpapi_cpp//lib") 

# Cannot open 
#link_directories(Z:\\blpapi_cpp\\lib) 

# Cannot open 
#link_directories(Z://blpapi_cpp//lib) 

# Cannot open 
#link_directories(Z:/blpapi_cpp/lib) 

# Cannot open 
#link_directories(Z:/ILMAPI/lib/PROD/LATEST/src/alphalib/blpbind/src/lib) 

# Cannot open 
#link_directories("Z:/ILMAPI/lib/PROD/LATEST/src/alphalib/blpbind/src/lib") 

# Cannot open 
link_directories(Z://ILMAPI//lib//PROD//LATEST//src//alphalib//blpbind//src//lib) 

# Cannot open 
link_directories("Z://ILMAPI//lib//PROD//LATEST//src//alphalib//blpbind//src//lib") 


TARGET_LINK_LIBRARIES(blpbind PUBLIC blpapi3_32) 

私は次のことをすべて試してみましたが、それぞれのケースでまったく同じエラーが表示されることを確認しました。

Br及びおかげ

+0

それ私を見て、両方を試してみてくださいCMakeが 'target_link_libraries'呼び出しでフルパス**をライブラリに使うように勧めました。 'TARGET_LINK_LIBRARIES(some_project PUBLIC" Z:/folder/subfolder/lib/problematic_old_library.lib ")と似ています。 – Tsyvarev

+0

これは問題を取り除いたが、CMakeList.txtファイルの別の問題に関連している可能性のある新しいものを導入したことを確認しました。ありがとう! – JSH

答えて

0

たぶん、あなたのパスにスペースが含まれています(https://msdn.microsoft.com/en-us/library/y6b12xkc.aspx

ファイルが見つからない場合にLNK1181エラーが表示されているようです。反対側には

Z:/folder\ with\ space\ name/subfolder/lib 

、あなたが二重の\を使用することができるようです:あなたは、スペースを使用するときは、\

Z:/folder with space name/subfolder/lib

は、このようにする必要があり、パスと同じようにそれらをエスケープする必要がありますこのようなフォルダ:

"Z:\\folder with space name\\subfolder\\lib" 

は結果

関連する問題