Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22077

Why does this C++ project fail to build even when appropriate .lib is linked in?

$
0
0

I am attempting to build sample code from Actian Btrieve (https://docs.actian.com/psql/btrieve2v13/html/btest_8cpp-example.html)

It wouldn't build so I've simplified the code down to the following, just to get it working.

#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;
}

That code builds and runs successfully. Libraries are statically linked and the compiler finds the btrieveCpp.h header file because I've included in the search path.

The build command looks like hte following (the breaks are just so you can read it more easily):

    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

Program Output

The program output looks like:

program output

The Problem

However, if I uncomment the BtrieveFile line then I get errors when I build, which looks like the following:

build errors

Using Code::Blocks IDE

I'm using the Code::Blocks IDE and when I right-click the BtrieveFile item and choose Find Declaration then the IDE takes me to the .H file so it knows where the item is defined.

find definition

Also, keep in mind that the other item (Btrieve::MAXIMUM_RECORD_LENGTH) is also defined there (btrieveCpp.h), but it builds with no errors.

Here's where it takes me in the .H file:

btrieve file

What I've Tried

I thought this was because it needed the defintions provided by the .lib file so I added the appropriate .lib so the linker would find it and statically link it in.

I added the lib file as a dependency:

dependency link

After that I attempted to build again but it still fails.

The build log looks like the following: You can see that the .lib is being linked in now.

-------- Build: Debug in Btrieve1 (compiler: GNU GCC Compiler)---------------

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 C:\Dev\Actian\Zen-SDK-Btrieve2API-Windows-noarch-14.00.046.000\win32\x86\btrieveCpp.lib
c:/devtools/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe:
obj\Debug\btest.o: in function `main':
C:/Dev/C++/Btrieve1/btest.cpp:13: undefined reference to 'BtrieveFile::BtrieveFile()'
c:/devtools/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe:
C:/Dev/C++/Btrieve1/btest.cpp:13: undefined reference to 'BtrieveFile::~BtrieveFile()'
c:/devtools/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe:
C://Dev/C++/Btrieve1/btest.cpp:13: undefined reference to 'BtrieveFile::~BtrieveFile()'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 2 second(s)) 4 error(s), 0 warning(s) (0 minute(s), 2 second(s))

Would you happen to know what I'm missing? Or what I need to do to resolve this?

EDIT - Changing Linkage

In btrieveC.h (included by btrieveCpp.h) there is indeed a block like the following:

#ifndef LINKAGE
    #ifdef __GNUC__
        #define LINKAGE
    #else
        #define LINKAGE __declspec(dllimport)
    #endif
#endif

However, if make the switch so that #define LINKAGE __declspec(dllimport) is used and then build I see the following errors (below)

Notice that the names are mangled in output now?

cdeclspec

Edit 2 - nm output of btrieveCpp.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

Viewing all articles
Browse latest Browse all 22077

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>