Я пытаюсь собрать пример кода из Actian Btrieve (https://docs.actian.com/psql/btrieve2v13/html/btest_8cpp-example.html)
Это не будет построено, поэтому я упростил код до следующего, просто чтобы получить это работает.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stdint.h>
#include "btrieveCpp.h"
#include <iostream>
int
main(int argc, char *argv[])
{
Btrieve::StatusCode status = Btrieve::STATUS_CODE_UNKNOWN;
std::cout << Btrieve::MAXIMUM_RECORD_LENGTH << std::endl;
//BtrieveFile btrieveFile;
std::cout << "test" << std::endl << status;
return 0;
}
Этот код успешно создается и работает. Библиотеки статически связаны, и компилятор находит заголовочный файл btrieve Cpp .h, потому что я включил его в путь поиска.
Команда сборки выглядит следующим образом (разрывы просто так, что вы можете их прочитать проще):
mingw32-g++.exe -Wall -fexceptions -g
-IC:\Dev\Actian\Zen-SDK-Btrieve2API-Windows-noarch-14.00.046.000\include -c
C:\Dev\C++\Btrieve1\btest.cpp -o obj\Debug\btest.o
mingw32-g++.exe -o bin\Debug\Btrieve1.exe obj\Debug\btest.o -static
Вывод программы
Вывод программы выглядит следующим образом:
Проблема
Однако, если я раскомментирую строку BtrieveFile, то при сборке получаю ошибки, которые выглядят следующим образом:
Использование Code :: Blocks IDE
Я использую IDE Code :: Blocks, и когда я щелкаю правой кнопкой мыши элемент BtrieveFile и выбираю Найдите объявление, затем IDE перенесет меня в файл .H, чтобы узнать, где определен элемент.
Кроме того, имейте в виду, что другие там также определен элемент (Btrieve::MAXIMUM_RECORD_LENGTH
) (btrieve Cpp .h), но он собирается без ошибок.
Вот где он находится в файле .H:
То, что я пытался
Я думал, что это потому, что для этого нужны определения, предоставленные. файл lib, поэтому я добавил соответствующий .lib, чтобы компоновщик нашел его и статически связал его.
Я добавил файл lib как зависимость:
После этого я попытался снова собрать, но все равно не получилось.
Журнал сборки выглядит следующим образом: Вы можете видеть, что .lib сейчас связан.
-------- Сборка: отладка в Btrieve1 (компилятор: GNU G CC Compiler) ---------------
mingw32 -g ++. exe -Wall -fexceptions -g -I C: \ Dev \ Actian \ Zen-SDK-Btrieve2API- Windows -noarch-14.00.046.000 \ include - c C: \ Dev \ C ++ \ Btrieve1 \ btest. cpp -o obj \ Debug \ btest.o
mingw32-g ++. Exe -o bin \ Debug \ Btrieve1.exe obj \ Debug \ btest.o -stati c C: \ Dev \ Actian \ Zen-SDK-Btrieve2API- Windows -noarch-14.00.046.000 \ win32 \ x86 \ btrieve Cpp .lib
c: / devt ools / mingw / bin /../ lib / gcc / mingw32 / 8.2.0 /../../../../ mingw32 / bin / ld.exe:
obj \ Debug \ btest.o: в функции `main ':
C: / Dev / C ++ / Btrieve1 / btest. cpp: 13: неопределенная ссылка на' BtrieveFile :: BtrieveFile () '
c: / devtools / mingw /bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe:
C: / Dev / C ++ / Btrieve1 / btest. cpp: 13: неопределенная ссылка на 'BtrieveFile :: ~ BtrieveFile ()'
c: / devtools / mingw / bin /../ lib / gcc / mingw32 / 8.2.0 /../ ../../../mingw32/bin/ld.exe:
C: //Dev/C++/Btrieve1/btest.cpp: 13: неопределенная ссылка на 'BtrieveFile :: ~ BtrieveFile ( ) '
collect2.exe: ошибка: ld вернул 1 состояние выхода
Процесс завершен со статусом 1 (0 минут, 2 секунд) 4 ошибок, 0 предупреждений (0) минут (ы), 2 секунд (ы)
Вы случайно не знаете, что мне не хватает? Или что мне нужно сделать, чтобы решить эту проблему?
РЕДАКТИРОВАТЬ - Изменение связи
В btrieve C .h (включен btrieve Cpp .h) там это действительно блок, подобный следующему:
#ifndef LINKAGE
#ifdef __GNUC__
#define LINKAGE
#else
#define LINKAGE __declspec(dllimport)
#endif
#endif
Однако, если сделать переключатель так, чтобы использовался #define LINKAGE __declspec(dllimport)
, а затем построить, я вижу следующие ошибки (ниже)
Обратите внимание, что теперь имена выводятся на выход?
Редактировать 2-нм выход btrieve Cpp .lib
nm -C C:\Dev\Actian\Zen-SDK-Btrieve2API-Windows-noarch-14.00.046.000\win32\x86\btrieveCpp.lib | findstr /I BtrieveFile
00000000 T ??0BtrieveFile@@IAE@PAUbtrieve_file@@@Z
00000000 I _imp_??0BtrieveFile@@IAE@PAUbtrieve_file@@@Z
00000000 T ??0BtrieveFile@@QAE@XZ
00000000 I _imp_??0BtrieveFile@@QAE@XZ
00000000 T ??0BtrieveFileAttributes@@QAE@XZ
00000000 I _imp_??0BtrieveFileAttributes@@QAE@XZ
00000000 T ??0BtrieveFileInformation@@QAE@XZ
00000000 I _imp_??0BtrieveFileInformation@@QAE@XZ
00000000 T ??1BtrieveFile@@QAE@XZ
00000000 I _imp_??1BtrieveFile@@QAE@XZ
00000000 T ??1BtrieveFileAttributes@@QAE@XZ
00000000 I _imp_??1BtrieveFileAttributes@@QAE@XZ
00000000 T ??1BtrieveFileInformation@@QAE@XZ
00000000 I _imp_??1BtrieveFileInformation@@QAE@XZ
00000000 T ??4BtrieveFile@@QAEAAV0@ABV0@@Z
00000000 I _imp_??4BtrieveFile@@QAEAAV0@ABV0@@Z
00000000 T ??4BtrieveFileAttributes@@QAEAAV0@ABV0@@Z
00000000 I _imp_??4BtrieveFileAttributes@@QAEAAV0@ABV0@@Z
00000000 T ??4BtrieveFileInformation@@QAEAAV0@ABV0@@Z
00000000 I _imp_??4BtrieveFileInformation@@QAEAAV0@ABV0@@Z
00000000 T ?BulkCreate@BtrieveFile@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveBulkCreatePayload@@PAVBtrieveBulkCreateResult@@@Z
00000000 I _imp_?BulkCreate@BtrieveFile@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveBulkCreatePayload@@PAVBtrieveBulkCreateResult@@@Z
00000000 T ?BulkRetrieveNext@BtrieveFile@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveBulkRetrieveAttributes@@PAVBtrieveBulkRetrieveResult@@W4LockMode@3@@Z
00000000 I _imp_?BulkRetrieveNext@BtrieveFile@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveBulkRetrieveAttributes@@PAVBtrieveBulkRetrieveResult@@W4LockMode@3@@Z
00000000 T ?BulkRetrievePrevious@BtrieveFile@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveBulkRetrieveAttributes@@PAVBtrieveBulkRetrieveResult@@W4LockMode@3@@Z
00000000 I _imp_?BulkRetrievePrevious@BtrieveFile@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveBulkRetrieveAttributes@@PAVBtrieveBulkRetrieveResult@@W4LockMode@3@@Z
00000000 T ?FileClose@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFile@@@Z
00000000 I _imp_?FileClose@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFile@@@Z
00000000 T ?FileCreate@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFileAttributes@@PAVBtrieveIndexAttributes@@PBDW4CreateMode@3@W4LocationMode@3@@Z
00000000 I _imp_?FileCreate@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFileAttributes@@PAVBtrieveIndexAttributes@@PBDW4CreateMode@3@W4LocationMode@3@@Z
00000000 T ?FileCreate@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFileAttributes@@PAVBtrieveIndexAttributes@@PB_WW4CreateMode@3@W4LocationMode@3@@Z
00000000 I _imp_?FileCreate@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFileAttributes@@PAVBtrieveIndexAttributes@@PB_WW4CreateMode@3@W4LocationMode@3@@Z
00000000 T ?FileCreate@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFileAttributes@@PBDW4CreateMode@3@W4LocationMode@3@@Z
00000000 I _imp_?FileCreate@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFileAttributes@@PBDW4CreateMode@3@W4LocationMode@3@@Z
00000000 T ?FileCreate@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFileAttributes@@PB_WW4CreateMode@3@W4LocationMode@3@@Z
00000000 I _imp_?FileCreate@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFileAttributes@@PB_WW4CreateMode@3@W4LocationMode@3@@Z
00000000 T ?FileOpen@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFile@@PBD1W4OpenMode@3@W4LocationMode@3@@Z
00000000 I _imp_?FileOpen@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFile@@PBD1W4OpenMode@3@W4LocationMode@3@@Z
00000000 T ?FileOpen@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFile@@PB_WPBDW4OpenMode@3@W4LocationMode@3@@Z
00000000 I _imp_?FileOpen@BtrieveClient@@QAE?AW4StatusCode@Btrieve@@PAVBtrieveFile@@PB_WPBDW4OpenMode@3@W4LocationMode@3@@Z
00000000 T ?GetBalancedIndexes@BtrieveFileInformation@@QAEHXZ
00000000 I _imp_?GetBalancedIndexes@BtrieveFileInformation@@QAEHXZ
00000000 T ?GetBtrieveFile@BtrieveCollection@@IAEPAVBtrieveFile@@XZ
00000000 I _imp_?GetBtrieveFile@BtrieveCollection@@IAEPAVBtrieveFile@@XZ
00000000 T ?GetBtrieveFile@BtrieveFile@@IAEPAUbtrieve_file@@XZ
00000000 I _imp_?GetBtrieveFile@BtrieveFile@@IAEPAUbtrieve_file@@XZ
00000000 T ?GetBtrieveFileAttributes@BtrieveFileAttributes@@IAEPAUbtrieve_file_attributes@@XZ
00000000 I _imp_?GetBtrieveFileAttributes@BtrieveFileAttributes@@IAEPAUbtrieve_file_attributes@@XZ
00000000 T ?GetBtrieveFileInformation@BtrieveFileInformation@@IAEPAUbtrieve_file_information@@XZ
00000000 I _imp_?GetBtrieveFileInformation@BtrieveFileInformation@@IAEPAUbtrieve_file_information@@XZ
00000000 T ?GetBtrieveFilePtr@BtrieveFile@@IAEPAPAUbtrieve_file@@XZ
00000000 I _imp_?GetBtrieveFilePtr@BtrieveFile@@IAEPAPAUbtrieve_file@@XZ
00000000 T ?GetClientTransactions@BtrieveFileInformation@@QAEHXZ
00000000 I _imp_?GetClientTransactions@BtrieveFileInformation@@QAEHXZ
00000000 T ?GetContinuousOperation@BtrieveFileInformation@@QAEHXZ
00000000 I _imp_?GetContinuousOperation@BtrieveFileInformation@@QAEHXZ
00000000 T ?GetCursorPosition@BtrieveFile@@QAE_JXZ
00000000 I _imp_?GetCursorPosition@BtrieveFile@@QAE_JXZ
00000000 T ?GetDuplicateRecordConflictCursorPosition@BtrieveFileInformation@@QAE_JXZ
00000000 I _imp_?GetDuplicateRecordConflictCursorPosition@BtrieveFileInformation@@QAE_JXZ
00000000 T ?GetDuplicateRecordConflictIndex@BtrieveFileInformation@@QAE?AW4Index@Btrieve@@XZ
00000000 I _imp_?GetDuplicateRecordConflictIndex@BtrieveFileInformation@@QAE?AW4Index@Btrieve@@XZ
00000000 T ?GetExplicitLocks@BtrieveFileInformation@@QAEHXZ
00000000 I _imp_?GetExplicitLocks@BtrieveFileInformation@@QAEHXZ
00000000 T ?GetFileVersion@BtrieveFileInformation@@QAE?AW4FileVersion@Btrieve@@XZ
00000000 I _imp_?GetFileVersion@BtrieveFileInformation@@QAE?AW4FileVersion@Btrieve@@XZ
00000000 T ?GetFixedRecordLength@BtrieveFileInformation@@QAEHXZ
00000000 I _imp_?GetFixedRecordLength@BtrieveFileInformation@@QAEHXZ
00000000 T ?GetFreeSpaceThreshold@BtrieveFileInformation@@QAE?AW4FreeSpaceThreshold@Btrieve@@XZ
00000000 I _imp_?GetFreeSpaceThreshold@BtrieveFileInformation@@QAE?AW4FreeSpaceThreshold@Btrieve@@XZ
00000000 T ?GetGatewayMajorVersion@BtrieveFileInformation@@QAEHXZ
00000000 I _imp_?GetGatewayMajorVersion@BtrieveFileInformation@@QAEHXZ
00000000 T ?GetGatewayMinorVersion@BtrieveFileInformation@@QAEHXZ
00000000 I _imp_?GetGatewayMinorVersion@BtrieveFileInformation@@QAEHXZ
00000000 T ?GetGatewayName@BtrieveFileInformation@@QAE?AW4StatusCode@Btrieve@@PADH@Z
00000000 I _imp_?GetGatewayName@BtrieveFileInformation@@QAE?AW4StatusCode@Btrieve@@PADH@Z
00000000 T ?GetGatewayName@BtrieveFileInformation@@QAEPBDXZ
00000000 I _imp_?GetGatewayName@BtrieveFileInformation@@QAEPBDXZ
00000000 T ?GetGatewayPatchLevel@BtrieveFileInformation@@QAEHXZ
00000000 I _imp_?GetGatewayPatchLevel@BtrieveFileInformation@@QAEHXZ
00000000 T ?GetGatewayPlatform@BtrieveFileInformation@@QAEHXZ
00000000 I _imp_?GetGatewayPlatform@BtrieveFileInformation@@QAEHXZ
00000000 T ?GetHandleCount@BtrieveFileInformation@@QAEHXZ