0

I have been making some applications that I would like to link to discord, specifically with Discord's SDK. The SDK comes with 64 and 32 bit x84 lib files, and a C++ folder full of the includes it needs, so I would assume C++ is supported.

However, I am very terrible at linking libraries or anything at that, and always run into issues when linking. I am using Dev C++ as my IDE, and my code is as follows:

#include <iostream>
#include "Discord/discord.h"
using namespace std;



void InitDiscord()
{
    auto discid = 772671910668133376; //Not my actuall discord app ID, but real one does not make a difference
    discord::Core* core{};
    discord::Core::Create(discid, DiscordCreateFlags_Default, &core);
}

int main(){
    InitDiscord();
    cout << "Discord active";
    while(1){
    }
    return 0;
}

and I am getting the error:

C:\TDM-GCC-64\x86_64-w64-mingw32\bin\ld.exe Discord Testing.o:Discord Testing.cpp:(.text+0x32): undefined reference to `discord::Core::Create(long long, unsigned long long, discord::Core**)'

for only the line discord::Core::Create(discid, DiscordCreateFlags_Default, &core); and not discord::Core* core{};

I am using C++17 and a newer TDM-GCC compiler, the same one that works for all of my other applications. I am including the .lib files and .dll files in the program's directory, and in the linker the only thing I am using is -discord_game_sdk.dll.lib which is a valid directory. I have also tried discord_game_sdk.dll.lib and putting the library in the same directory as the includes: Discord/discord_game_sdk.dll.lib. I have tried using both 32 bit and 64 bit libraries in all project and compiler directories with no change, and im sure this is something probably really simple, but nowhere have I found any example C++ discord programs or how to include their SDK.

If anyone could figure out what the problem is and how I can fix it, that would be very helpful and appreciated.

EDIT: It appears that user4581301 was right, TDM-GCC and other Mingw compilers do not support .lib files, and will ignore them despite being linked. The SDK did not come with any other formats other than .dylib, .so, and .bundle. This creates a somewhat new issue, I already have my compiler set up and cannot really switch to Visual Studio, so I need a way to convert .lib to .a somehow. A post here recommends http://code.google.com/p/lib2a/ , which requires a .def file, another file that did not come with the SDK, but apparently a program called gendef.exe that came with my compiler can create .def files from .dll files. That is indeed the case, however when attempting it I get the error:

    C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin>gendef.exe discord_game_sdk.dll
 * [discord_game_sdk.dll] Found PE image
 * failed to create discord_game_sdk.def ...

with no other warnings. Now I need to know if I am converting wrong, if there is an easier workaround, or if one of the other file types can be converted or used. Any suggestions at this point are welcome and appreciated!

  • 1
    *I am using C++17 and a newer TDM-GCC compiler* rock and ing roll! I am sick and tired of telling people not to use the Dev C++that comes with GCC 3. That said, when you get a `.lib` library, that's for Visual Studio. For GCC, you want a `.a` file. Go back to wherever you got the `.lib` file from and see if you can get a version for your GCC version. – user4581301 Jul 20 '21 at 01:24
  • Does this answer your question? [What is an undefined reference/unresolved external symbol error and how do I fix it?](https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix) – Ken White Jul 20 '21 at 01:28

0 Answers0