Я пытаюсь создать приложение C ++, которое подключается к серверу Perforce, но сборка не удалась, потому что он не может найти библиотеки p4api.
Я новичок в C ++, Visual Studio и p4api, поэтому я, вероятно, сделал что-то не так.
Я использую Windows 8 и Visual Studio 2013 Professional.
Подробности:
Я скачал p4api.zip с ftp://ftp.perforce.com/perforce/r15.2/bin.mingw64x64/
Обратите внимание, что библиотеки, найденные в p4api.zip, имеют тип . где, как в главе 2 гид пользователя говорит что для винды это должно быть .Lib
Конфигурация Visual Studio:
Из Visual Studio, Свойства проекта -> Свойства конфигурации:
C:\Users\myuser\Documents\Visual Studio 2013\Projects\ProjectName\ProjectName\lib\p4api
libclient.a;librpc.a;libsupp.a;libp4sslstub.a;wsock32.lib;libcmt.lib;oldnames.lib;kernel32.lib;ws2_32.lib;advapi32.lib
/DOS_NT /MT /DCASE_INSENSITIVE
C:\Users\myuser\Documents\Visual Studio 2013\Projects\ ProjectName\ProjectName\include\p4
Код
main.h
#pragma once
#include <iostream>
#include <clientapi.h>
class Main : public ClientUser
{
public:
Main();
~Main();
};
main.cpp
#include "Main.h"
Main::Main()
{
}Main::~Main()
{
}
int main() {
std::cout << "Hello World\n";
ClientApi client;
Error e;
client.Init(&e);
Main ui;
client.Run("info", &ui);
client.Final(&e);
}
Ошибки сборки:
1>------ Build started: Project: PEConnect, Configuration: Debug Win32 ------
1>cl : Command line warning D9025: overriding '/MDd' with '/MT'
1> Main.cpp
1>Main.obj : error LNK2019: unresolved external symbol "public: __thiscall Error::~Error(void)" (??1Error@@QAE@XZ) referenced in function _main
1>Main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall ClientUser::~ClientUser(void)" (??1ClientUser@@UAE@XZ) referenced in function "public: virtual __thiscall Main::~Main(void)" (??1Main@@UAE@XZ)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::InputData(class StrBuf *,class Error *)" (?InputData@ClientUser@@UAEXPAVStrBuf@@PAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::HandleError(class Error *)" (?HandleError@ClientUser@@UAEXPAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::Message(class Error *)" (?Message@ClientUser@@UAEXPAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::OutputError(char const *)" (?OutputError@ClientUser@@UAEXPBD@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::OutputInfo(char,char const *)" (?OutputInfo@ClientUser@@UAEXDPBD@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::OutputBinary(char const *,int)" (?OutputBinary@ClientUser@@UAEXPBDH@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::OutputText(char const *,int)" (?OutputText@ClientUser@@UAEXPBDH@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::OutputStat(class StrDict *)" (?OutputStat@ClientUser@@UAEXPAVStrDict@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::Prompt(class StrPtr const &,class StrBuf &,int,class Error *)" (?Prompt@ClientUser@@UAEXABVStrPtr@@AAVStrBuf@@HPAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::Prompt(class StrPtr const &,class StrBuf &,int,int,class Error *)" (?Prompt@ClientUser@@UAEXABVStrPtr@@AAVStrBuf@@HHPAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::ErrorPause(char *,class Error *)" (?ErrorPause@ClientUser@@UAEXPADPAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::Edit(class FileSys *,class Error *)" (?Edit@ClientUser@@UAEXPAVFileSys@@PAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::Diff(class FileSys *,class FileSys *,int,char *,class Error *)" (?Diff@ClientUser@@UAEXPAVFileSys@@0HPADPAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::Diff(class FileSys *,class FileSys *,class FileSys *,int,char *,class Error *)" (?Diff@ClientUser@@UAEXPAVFileSys@@00HPADPAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::Merge(class FileSys *,class FileSys *,class FileSys *,class FileSys *,class Error *)" (?Merge@ClientUser@@UAEXPAVFileSys@@000PAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall ClientUser::Resolve(class ClientMerge *,class Error *)" (?Resolve@ClientUser@@UAEHPAVClientMerge@@PAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall ClientUser::Resolve(class ClientResolveA *,int,class Error *)" (?Resolve@ClientUser@@UAEHPAVClientResolveA@@HPAVError@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::Help(char const * const *)" (?Help@ClientUser@@UAEXPBQBD@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual class FileSys * __thiscall ClientUser::File(enum FileSysType)" (?File@ClientUser@@UAEPAVFileSys@@W4FileSysType@@@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual class ClientProgress * __thiscall ClientUser::CreateProgress(int)" (?CreateProgress@ClientUser@@UAEPAVClientProgress@@H@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall ClientUser::ProgressIndicator(void)" (?ProgressIndicator@ClientUser@@UAEHXZ)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::SetOutputCharset(int)" (?SetOutputCharset@ClientUser@@UAEXH@Z)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::DisableTmpCleanup(void)" (?DisableTmpCleanup@ClientUser@@UAEXXZ)
1>Main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ClientUser::SetQuiet(void)" (?SetQuiet@ClientUser@@UAEXXZ)
1>Main.obj : error LNK2019: unresolved external symbol "public: __thiscall ClientApi::ClientApi(void)" (??0ClientApi@@QAE@XZ) referenced in function _main
1>Main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall ClientApi::~ClientApi(void)" (??1ClientApi@@UAE@XZ) referenced in function _main
1>Main.obj : error LNK2019: unresolved external symbol "public: void __thiscall ClientApi::Init(class Error *)" (?Init@ClientApi@@QAEXPAVError@@@Z) referenced in function _main
1>Main.obj : error LNK2019: unresolved external symbol "public: void __thiscall ClientApi::Run(char const *,class ClientUser *)" (?Run@ClientApi@@QAEXPBDPAVClientUser@@@Z) referenced in function _main
1>Main.obj : error LNK2019: unresolved external symbol "public: int __thiscall ClientApi::Final(class Error *)" (?Final@ClientApi@@QAEHPAVError@@@Z) referenced in function _main
1>Main.obj : error LNK2001: unresolved external symbol "private: static char * StrBuf::nullStrBuf" (?nullStrBuf@StrBuf@@0PADA)
1>c:\users\myuser\documents\visual studio 2013\Projects\ProjectName\Debug\PEConnect.exe : fatal error LNK1120: 32 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Дополнительные проблемы:
1) Я правильно загрузил p4api? Я не могу найти папку специально для Windows. Единственная папка, которая выглядит более актуальной для Windows, — это bin.mingw
2) Почему файлы библиотеки имеют тип . не .Lib?
3) Правильно ли я установил зависимости в Visual Studio? Если да, почему сборка не удалась?
Пожалуйста, дайте мне знать, если вам нужно больше деталей.
Заранее спасибо.
Задача ещё не решена.
Других решений пока нет …