How do I link SDL with Visual Studio 2019 - sdl

I don't know how to link libraries with Visual Studio 2019 (I am using Windows 10), how do I link libraries?

I assume is the same as in VS 2017.
Project / "your project name" Properties... /
At Configuration select All Configurations
Then
Project / "your project name" Properties... / Configuration Properties / VC++ Directories /
At Include Directories add path to your SDL include folder
At Library Directories add path to your SDL lib folder ( lib/x86 or lib/x64 )
Then
Project / "your project name" Properties... / Configuration Properties
/ Linker / Input /
At Additional Dependencies add ( in this order ):
SDL2.lib
SDL2main.lib
Then copy all the .dll files from "your SDL folder" / lib / ( x86 or x64 )
to your Visual Studio project debug folder ( the debug folder in the location where your .sln file is ).
Don't forget to use #include <SDL.h> in your code.
Also change int main() function in main.cpp with int main(int argc, char* args[]).

Related

Cannot open include file: 'linmath.h'

I have set up GLFW and GLAD in Visual Studio 2017 as follows:
I created in C: directory, folder GLFW-GLAD, and in V.S., Empty Project "Project-0" and Source file "Main.cpp".
1. In project GLFW-GLAD's "Properties", Configuration: [All Configurations], Platform: [Active(Win32)], Configuration Properties:
1.1. C/C++ > General > "Additional Include Directories" window > "C:\GLFW-GLAD\glfw\include" and "C:\GLFW-GLAD\glad\include".
1.2. Linker > General > "Additional Library Directories" window > "C:\GLFW-GLAD\glfw\lib-vc2015"
1.3. Linker > Input > "Additional Dependencies" window > "opengl32.lib; glfw3.lib; glfw3dll.lib".
1.4. Linker > System > Subsystem > Console (/SUBSYSTEM:CONSOLE)
2. In project folder "Project-0" I have pasted files: "glad.c" and "glfw3.dll".
I copied program from https://www.glfw.org/docs/latest/quick.html and pasted in Main.cpp code area. I attempted run it but failed. Output is
"fatal error C1083: Cannot open include file: 'linmath.h': No such file or directory"
Please help.
Add to project (by Solution Explorer > Source Files > Add > New Item > Header File) header file linmath.h. Go to https://github.com/glfw/glfw/blob/master/deps/linmath.h copy code and paste in linmath.h code area.
Delete glad.c from project folder and add it to project by Solution Explorer > Source Files > Add > Existing Item. Regards.

Qt : Unit Test with Visual Studio

I have a Visual Studio Project and want to write some Unit Test for it.
I tried doing that by using a "Native Unit Test Project".
The Problem is, that when I use a QString in the Test, the Test fails with following message:
Message: Failed to set up the execution context to run the test
Any suggestions how I can write Unit Test using Qt?
#include "stdafx.h"
#include "CppUnitTest.h"
#include <QtCore/QCoreApplication>
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace Test
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
QString a = "Test";
Assert::IsTrue(true);
}
};
}
I have tried with the above example of yours and i am able to compile the unit test. These are the following changes I've done apart from copying your code.
Check if your QT is built with 32 bit or 64 bit compiler.
You need to set the same in Solution Platforms.
You need to add include directory path and the lib file path(Qt5Cored.lib(for
debug)/Qt5Core.lib(for release)) in the Project properties.
To run the unit test you need to copy the
Qt5Cored.dll/Qt5Core.dll file in the folder where your unit test dll file is generated(After compilation).
PS:- I am using VS 2015 but this doesn't matter.
I have also ran into this issue with Qt6 with a project created using the Qt Visual Studio Tools extension for Visual Studio 2019.
QString was one of the things popping up as an error during the build process, but there was various more errors. My solution was as follows:
Gone to the Microsoft Unit Testing Framework for C++ project's Properties (right-click on solution, bottom option of the menu "Properties")
As mentioned in #sonulohani's response, I had it running in x64 by default.
Under Configuration Properties > Linker > General Additional Library Directories I added the path to my QT installation location libs folder (for me this was C:\Qt\6.1.2\msvc2019_64\lib) at the top of the list.
Under Configuration Properties > Linker > Input Additional Dependencies I added a link to all the "*.lib" files from that very same QT installation (for me, this was C:\Qt\6.1.2\msvc2019_64\lib\*.lib) AND a link to the build output .obj files for the Qt project ($(SolutionDir)<MY PROJECT NAME>\$(IntDir)*.obj where <MY PROJECT NAME> was my project name). This second part may not necessarily be needed.
Copying just the Qt6Core.dll/Qt6Cored.dll as suggested by #sonulohani did not work. It was still missing stuff. So in the properties, under Configuration Properties > Build Events > Post-Build Event Command Line I added this script to copy all the Qt6 dll files to the test project .dll output directory:
for %%f in (C:\Qt\6.1.2\msvc2019_64\bin\Qt6*.dll) do #copy /y %%f $(SolutionDir)$(Platform)\$(Configuration)\Tests\
Now at that point I had another issue, since both my test project and my actual Qt project was dumping its files into the same output directory, and the Qt project did not like having all those dlls in there and did not run anymore. So I created the $(SolutionDir)$(Platform)\$(Configuration)\Tests\ directory within the regular output directory, and also made this \Tests\ subdirectory the output directory for the test project (Configuration Properties > General Output Directory).

cannot find -llibSDL2main

I am trying to configure eclipse c++ to use SDL2.0.3.
1) I downloaded SDL
2)put `SDL2` folder with headers into `gcc\include` folder
3)I put libSDL2.a, libSDL2.dll.a, libSDL2.la, libSDL2_test.a, libSDL2main.a into gcc\lib folder
4) I put SDL2.dll into my current project's configuration DEBUG folder
5) I added in `project->properties->c/c++ build->settings->mingw c++ linker->libraries libSDL2main and libSDL2 (pic.)
But it shows me an error that it cannot find -llibSDL2main.
P.S I had issue once with winapifamily but I resolved it by putting winapifamily.h in gcc\include

Setting up ZeroMQ in a Visual Studio '13 Project

I'm trying to get ZeroMQ to work with my C++ project. I want to do the ZeroMQ Hello World tutorial, shown below:
// Hello World server
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
int main (void)
{
// Socket to talk to clients
void *context = zmq_ctx_new ();
void *responder = zmq_socket (context, ZMQ_REP);
int rc = zmq_bind (responder, "tcp://*:5555");
assert (rc == 0);
while (1) {
char buffer [10];
zmq_recv (responder, buffer, 10, 0);
printf ("Received Hello\n");
sleep (1); // Do some 'work'
zmq_send (responder, "World", 5, 0);
}
return 0;
}
However, whenever I try to compile and run it, Visual Studio says it can't find zmq.h or any of the ZeroMQ methods I am using. I already installed ZeroMQ from http://zeromq.org/distro:microsoft-windows, what else do I have to do to get it to work?
Including the headers:
Right click Project -> Properties -> C/C++ -> General
Edit 'Additional Include Directories'
Add C:\Program Files\ZeroMQ 4.0.4\include
Right click 'Header Files' -> Add -> Existing Item -> C:\Program Files\ZeroMQ 4.0.4\include\zmq.h
Adding the library dir:
Right click Project -> Properties -> Linker -> General
Edit 'Additional Library Directories'
Add C:\Program Files\ZeroMQ 4.0.4\lib\
Linking to the proper library:
Right click Project -> Properties -> General
Check "Platform Toolset", notice the version number (ex: v120)
Configuration Properties -> Linker -> Input
Edit 'Additional Dependencies'
Add appopriate toolset library (ex: libzmq-v120-mt-gd-4_0_4.lib) "-gd-" is the debug version
Ensure your app is 64-bit
Build -> Configuration Manager
Active solution platform -> New...
Select x64
Copy settings from Win32
Right click Project -> Properties -> Linker -> All Options
Edit "Output File" set to ".\x64\Debug\whatever.exe"
Include the pre-compiled dll as a resource for distribution
Right click Project -> Properties -> Build Events -> Post-Build Event
Edit "Command Line"
insert copy command
ex:
copy /Y "C:\Program Files\ZeroMQ 4.0.4\bin\libzmq-v120-mt-gd-4_0_4.dll" "$(OutDir)"
You should download and install 0MQ first.
Then you will be able to configure your Project properties to point to the right include and lib paths.

using googletest in eclipse: how?

I've downloaded google test, but now I've no idea on how to link it to my project in eclipse.
Should I add it as a source folder? Should include it as g++ included library? And how can I run test then?
Using Riga's excellent answer, here is a summary of how I got it to work:
Created a new C++ project in Eclipse (I chose Executable > Empty Project)
Downloaded googletest 1.5.0, untarred, and ran ./scripts/fuse_gtest_files.py . <project-dir>/contrib
Back in Eclipse, excluded the contrib directory from the Release build configuration, and added <project-dir>/contrib to the include directories (odd, I know)
Added a src directory and added a class named Foo (see below for the contents of Foo.h--I left Foo.cpp empty for now)
Added a test directory in Eclipse, excluded it from the Release build configuration, added <project-dir>/contrib to the include directories, and added new source files FooTest.cpp and AllTests.cpp (see below for contents)
Built and ran the project!
Foo.h:
#ifndef FOO_H_
#define FOO_H_
class Foo {
public:
virtual ~Foo();
Foo();
bool foo(void) { return true; }
};
#endif /* FOO_H_ */
FooTest.cpp:
#include "gtest/gtest.h"
#include "Foo.h"
namespace {
class FooTest : public ::testing::Test {
protected:
Foo foo;
};
TEST_F(FooTest, Foo) {
ASSERT_TRUE(foo.foo());
}
}
AllTests.cpp:
#include "gtest/gtest.h"
#include "FooTest.cpp"
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Here are the detailed steps:
In Eclipse, open the File menu and select New > C++ Project
Project Type: Executable > Empty Project
Toolchain: Linux GCC
Click Finish
Open a terminal and cd /tmp
wget http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2
cd gtest-1.5.0/
./scripts/fuse_gtest_files.py . <project-dir>/contrib
Back in Eclipse, right-click on the project folder in the Project Explorer pane, then select Refresh
In the Project Explorer pane, right-click on the contrib folder, select Exclude from build...*, untick only the **Release box, and click OK
Right-click on the contrib folder and select Properties > C/C++ Build > Settings > Tool Settings tab > GCC C++ Compiler > Directories
Click on the Add... button, then the Workspace... button, then select <project-name>/contrib and click OK to add the directory
Click OK once more to accept your changes to the build settings
Right-click on the project in the Project Explorer pane and select New > Folder, enter src as its name, and click OK
Right-click on the src folder in the Project Explorer pane and select New > Class, name it Foo, then click OK (see above for contents of Foo.h; Foo.cpp can be left as is)
Right-click on the project in the Project Explorer pane and select New > Folder, enter test as its name, and click OK
Follow the steps above to add <project-name>/contrib and <project-name>/src as include directories to the test directory
Right-click on the test folder, then select New > Source File to add AllTests.cpp to the test folder, then repeat the same steps to add FooTest.cpp (see above for contents)
Right-click on FooTest.cpp and select Exclude from build..., click the Select All button, then OK
Right-click on the project in the Project Explorer pane, and select Properties > C/C++ Build > Settings > Tool Settings tab > GCC C++ Linker > Libraries, then click the Add... button, enter pthread (required by googletest), click OK to add the library, then OK once more to accept the changes
Hit Ctrl-b to build the project
Hit Ctrl-F11 to run the project
Victory!
Step 1 Install Eclipse
If Eclipse is not already installed on the machine, then get the latest version of the Eclipse IDE for C/C++ Developers from the Eclipse downloads page (http://www.eclipse.org/downloads/).
If Eclipse is already installed but only for Java, download the C++ plug-in following these instructions.
a. Open Eclipse and click on Help->Install New Software
b. In the Work with: box, type in http://download.eclipse.org/tools/cdt/releases/kepler. After a few moments, the Name box will populate. Select the following components:
CDT Main Features -> C/C++ Development Tools
CDT Main Features -> C/C++ Development Tools SDK
CDT Optional Features -> C/C++ Unit Testing Support
CDT Optional Features -> C/C++ Unit Testing Support Source
CDT Optional Features -> C/C++ Visual C++ Support
c. Click on Next, agree to the statements, and then Finish.
Step 2 Download Cygwin
Install Cygwin by clicking on the setup-x86_64.exe link on the Cygwin install page (http://www.cygwin.com/install.html). After running, click Next through the defaults until you get to the Select Packages window.
You will need to search for and install two packages: gcc and make.
The first search term is gcc. Search for gcc and then open the Devel folder. Mark the following packages for install by clicking on the word Skip (it will then change to the build number, which may by higher than the one depicted here): gcc-core, gcc-g++, and libgcc1.
The second search term is make. Here, we will only need the Devel package make.
Once these have been selected, click Next to install.
Step 3 Download and build Google Test project
Download the latest release of GoogleTest from https://code.google.com/p/googletest/downloads/list, and extract the zip file contents into a common directory. It is important that all users are able to access this directory.
(Note: the following commands use make -- the last revision of GoogleTest that uses make is https://github.com/google/googletest/releases/tag/release-1.8.1. For future revisions of GoogleTest use cmake instead.)
To build the Google Test project:
Open Cygwin (find the install directory for Cygwin and double-click
on Cygwin.bat).
Change the current working directory to the unzipped
GoogleTest make directory: cd c:/<<yourpath>>/gtest-1.7.0/make/
Build the project: make
Create an archived library out of the
gtest-all.o file: ar -rv libgtest.a gtest-all.o
Step 4 Add the Cygwin bin directory to the computers PATH variable
Follow the instructions on this page for your version of Windows: http://www.java.com/en/download/help/path.xml, to add Cygwins bin directory to the computers PATH environment variable. (typically by adding ;C:\cygwin64\bin to the end of the current value).
Step 5 Create a new project that uses GoogleTest
Start Eclipse and select File->New->C++ Project. Enter the values below and click Finish.
In the Project Explore, right-click the name of the project and select Properties. Under C/C++ Build, change the Builder type to Internal Builder.
Under C/C++ Build, select Settings, then click on the Includes folder under Cygwin C++ Compiler. Click on the Add button in the top box and then browse to the GoogleTest include folder.
Lastly, under the Cygwin C++ Linker folder, select Miscellaneous and then click the Add icon under Other objects. Find the libgtest.a file that you built back in step 3 (it should be in the make directory of the unzipped gtest folder).
Thats it! Now you're ready to try it out.
Step 6 Write some code that uses GoogleTest
Add a source folder by clicking File->New->Source folder. Call it
src.
Add a header file by right-clicking on the src folder and select New->Header File. Call this file Counter.h.
Add a source file by right-clicking on the src folder and select New->Source File. Call
this file Counter.cpp.
Add another source file and call it Counter_Tests.cpp.
Copy and paste the code below into the appropriate files:
Counter.h
class Counter {
private:
int mCounter;
public:
Counter() : mCounter(0) {}
int Increment();
};
Counter.cpp
#include <stdio.h>
#include "Counter.h"
int Counter::Increment() {
return mCounter++;
}
Counter_Tests.cpp
#include "gtest/gtest.h"
#include "Counter.h"
TEST(Counter, Increment) {
Counter c;
EXPECT_EQ(0, c.Increment());
EXPECT_EQ(1, c.Increment());
EXPECT_EQ(2, c.Increment());
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
In the Project menu select Build All. Now, to connect up the GoogleTest unit testing framework, select Run Configurations from the Run menu. From this dialog, select C/C++ Unit and click the New button.
It should fill in this project name automatically under C/C++ Application, if not click on Search Project to select this project. Next, click on the C/C++ Testing tab. In the Tests Runner drop-down, choose Google Tests Runner, and then click Run to watch the magic!
Below is a snapshot of the result. After writing more code/tests, you can click on the button highlighted in red to quickly recompile and re-run all of the tests.
You should not add it to your source folder, make separate folder instead. This is for avoidance of dependency of your production code from testing project. Do it like this
../ #your project folder
Makefile
src/
module1 #some module
module2 #another module
build #tmp for build
dist #binaries
contrib/
gtest
...
test/ #your test project folder
Makefile
src/
module1 #correspondent to main project's one
module2 #correspondent to main project's one
build
dist
...
I usually use google test as two files, this is very handy. Use scripts/fuse_gtest_files.py from gtest distribution to extract them. Having only two files you can include their compilation in your test project compilation and have simple project structure.
In your test projectspecify include directories ../contrib:../src:src.
Thus you can include headers like this
test/src/module1/class1Test.h:
#include "gtest/gtest.h"
#include "module1/class1.h"
// test class1 here
// ...
test/src/mainTest.cpp:
#include "gtest/gtest.h"
#include "module1/class1Test.h"
#include "module2/class2Test.h"
// include other tests you have
// ...
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Here is my solution for Eclipse 4.3 and CDT 8.2
I felt this was somewhat easier then described above.
Download gtest and install it as described in the readme.txt (using cmake and make in linux)
Go to "YourProject-> Properties-> C/C++ Build-> Settings-> GCC C++ Compiler-> Includes-> Include paths" and add the include folder in gtest
Go to "YourProject-> Properties-> C/C++ Build-> Settings-> GCC C++ Linker-> Libraries", add the gtest folder as search path and add libraries "gtest" and "pthread"
(4. If you have tests in the same project as sources exclude tests from release build)
Go to "Run-> Run Configurations..." and Create a new C/C++ Unit run configuration
Set project to your project and C/C++ Application to your Application in main tab. Set Tests Runner to Google Test Runner in C/C++ Testing tab.
(7. Error notifications may stick around in the eclipse gui, if this is the case re-indexing the project might help)
I've tray your solution and it runs well. I can say that for compile gtest is not very clear in the README. txt.
I've run the makefile in the /make directory through a cygwin console.
In my case the compiler advise me that don't findt the pthread library. So I modified the line
CXXFLAGS += -g -Wall -Wextra -pthread
and changed it to
CXXFLAGS += -g -Wall -Wextra -lpthread
The output I get is gtest_main.a. Then I have rename this file into libgtest.a and copy it to C:\cygwin\lib directory.
Then i've configure my eclipse project to use cygwin and added gtest and pthread as you say... and it works!
I hope it can help someone