私は私の問題を説明するために2つのソリューションを設定しました。合計3つのプロジェクトです。デバッグモードでコンパイルしますが、リリースモードでコンパイルしても問題は解決しません。Visual Studio LNK1104最小限の例
MyRunnerCore.lib
は3rdParty.lib
が必要です。それはなぜですか、私はそれに対して何ができますか?
アイデアは、私はlibにプロジェクト(正常に動作します)などの第三者を構築することである。ここでは
はフォルダが構成されている方法を説明するための写真です。それから、私は、libファイルを使ってcppファイルでMyRunnerCoreを構築します(うまく動作します)。最後に私はMyRunnerCore.lib(LNK1104)を使用するコンソールアプリケーションをビルドします。出力ウィンドウには、次のように表示されます。1>------ Build started: Project: MyRunnerCore, Configuration: Release Win32 ------
1> Core.cpp
1> MyRunnerCore.vcxproj -> C:\SO\MyRunner\Release\MyRunnerCore.lib
2>------ Build started: Project: MyRunner, Configuration: Release Win32 ------
2> main.cpp
2>LINK : fatal error LNK1104: cannot open file '3rdParty.lib'
========== Build: 1 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
ここでは、Project Iがいくつかの設定を編集したときに注釈を付けるソースファイルがあります。
ThirdPartyClass.cpp
#include "ThirdParyClass.hpp"
int ThirdParyClass::GenerateNumber()
{ return 4; }
ThirdPartyClass.hpp
#pragma once
class ThirdParyClass
{ public: int GenerateNumber(); };
main.cppに
//MyRunner Properties:
//Project Dependencies Added MyRunnerCore
//Include Directories Added $(SolutionDir)
//Library Directories Added $(OutDir)
#include <MyRunnerCore\Core.h>
#pragma comment (lib, "MyRunnerCore.lib")
int main() { Core c{}; return c.Run(); }
Core.cpp
#include "Core.h"
//MyRunnerCore Properties:
//Added To Include Path C:\SO\3rdParty
//Added To Library Path C:\SO\3rdParty\Debug
#include <3rdParty\ThirdParyClass.hpp>
#pragma comment(lib, "3rdParty.lib")
int Core::Run()
{
ThirdParyClass tp{};
return tp.GenerateNumber();
}
#pragma once
class Core
{ public: int Run(); };
Core.hなぜリンカがリンクする3rdParty.libを必要としていますか?
リンカービルドを行うための設定がありませんMyRunnerCore.lib
3rdParty.lib
への参照なしでビルドできますか?
MSVCは静的ライブラリを組み合わせた機能をサポートしていません。明示的に第三者のlibにリンクする必要があります。リンカーがライブラリを探すために設定されているパスに含まれている必要があります。 – drescherjm