Can't build C++ project with XLNT library - c++

I am trying to build a sample project using the XLNT-Library under Windows 8 using MinGW g++.
The code is the sample code found in the github Documentation:
#include <xlnt/xlnt.hpp>
int main()
{
xlnt::workbook wb;
xlnt::worksheet ws = wb.active_sheet();
ws.cell("A1").value(5);
ws.cell("B2").value("string data");
ws.cell("C3").formula("=RAND()");
ws.merge_cells("C3:C4");
ws.freeze_panes("B2");
wb.save("example.xlsx");
return 0;
}
I downloaded the library as a zip file, extracted it and copied the folder [xlnt-master-root]\include\xlnt into the folder where my main.cpp resides and then tried to compile it with this command:
g++ -std=c++14 -lxlnt -Ixlnt/include .\excelTest.cpp -o excelTest.exe
But this results in the following error:
c:/users/s/documents/myprogramms/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe:
cannot find -lxlnt
I also tried copying the [xlnt-master] folder to the main.cpp location and tried to compile it again with the same result.
I can program in C++ but I have not worked with libraries before.
Can you please give me a hint how to use and compile the project with the library correctly?
FYI: I also tried building the library with with cmake as found here.
Although cmake was a success, make -j8 won't do anything because no Makefile is created in the build directory.
Maybe I went wrong here?
Thanks for your help...

using the lasted visual studio 2017,you can build the xlnt library automatic.
you can download the library below:
https://1drv.ms/f/s!AvyYANq3dYDem1g9MtINWWw7CyTH

Related

Installing opencv From Command Line (Windows)

I am trying to use opencv in a project, and am running into problems 'installing' it. I have extracted the opencv files and have created a small test program:
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
int main(int argc, char **argv){
cv::Mat im=cv::imread((argc==2)? argv[1]: "testing.jpg",1);
if (im.empty()){
std::cout << "Cannot open image." << std::endl;
} else {
cv::imshow("image",im);
cv::waitKey(0);
}
return 0;
}
To compile the program I have used the command below:
g++ -I"../../PortableGit/opt/opencv/build/include/" -L"../../PortableGit/opt/opencv/build/x64/vc15/lib" main.cpp -lopencv_core -lopencv_highgui -o main
I get the errors below:
In file included from ../../PortableGit/opt/opencv/build/include/opencv2/core.hpp:3293:0,
from ../../PortableGit/opt/opencv/build/include/opencv2/highgui.hpp:46,
from ../../PortableGit/opt/opencv/build/include/opencv2/highgui/highgui.hpp:48,
from main.cpp:1:
../../PortableGit/opt/opencv/build/include/opencv2/core/utility.hpp:714:14: error: 'recursive_mutex' in namespace 'std' does not name
a type
typedef std::recursive_mutex Mutex;
^~~~~~~~~~~~~~~
../../PortableGit/opt/opencv/build/include/opencv2/core/utility.hpp:715:25: error: 'Mutex' is not a member of 'cv'
typedef std::lock_guard<cv::Mutex> AutoLock;
^~
../../PortableGit/opt/opencv/build/include/opencv2/core/utility.hpp:715:25: error: 'Mutex' is not a member of 'cv'
../../PortableGit/opt/opencv/build/include/opencv2/core/utility.hpp:715:34: error: template argument 1 is invalid
typedef std::lock_guard<cv::Mutex> AutoLock;
I believe that it has something to do with mingw binaries no longer being included with opencv. I am missing the opencv/build/x86/mingw directory.
My questions are:
How do I 'install' opencv and use it without also installing some sort of IDE and/or CMake? (I prefer to use vim and the command line.)
Once installed, what command do I use to compile and link a program with opencv?
Any help is appreciated.
Edit:
This appears to be a problem with GCC's implementation of threads on windows. Using mingw-w64 instead of mingw fixed the std::recursive_mutex issue, but now the linker cannot find the proper files.
/i686-w64-mingw32/bin/ld.exe: cannot find -lopencv_core
/i686-w64-mingw32/bin/ld.exe: cannot find -lopencv_highgui
After quite a bit of trying things out, this is what I got to work. Oddly, following the LINUX guide to install opencv worked better than the WINDOWS guide, even though I have a windows computer.
Guide to Installing OpenCV on Windows Without VS
Heads-up: This is a multi-step process, 3 separate tools are required. Be prepared for this to take a while.
Part 1: Get everything ready
Download MinGW-w64.
On the downloads page, click on the "MinGW-w64-builds" option. Do not click on the "win-builds" option.
The reason MinGW-w64 has to be used is because it is a newer version of the MinGW compiler suit that has been improved for windows. This means that it supports the posix thread system, where as the standard MinGW compiler only supports the win32 thread system. OpenCV relies on the posix thread system, necessitating the MinGW-w64 compiler.
Extract the MinGW-w64 zip folder to a directory. In my case its PortableGit/opt/MinGW-w64
At this point, you can add the MingGW-w64/mingw32/bin folder to your path. (Assuming that this won't cause any conflicts.) If you do so, you will not have to constantly specify the g++ executable directory to run it. This is up to your discretion.
Download an opencv release.
Do not download the package for windows, click the button that says "sources"
Extract the opencv sources zip folder to a directory. In my case its PortableGit/opt/opencv-4.3.0
Also download the opencv_contrib source files directly from the repository.
Extract that folder and place it inside the top level opencv folder: PortableGit/opt/opencv-4.3.0/opencv_contrib in my case.
Download CMake.
I downloaded the zip folder, but you can download the installer if you wish.
Extract the CMake zip folder if you downloaded that, or run the installer. I put my CMake folder here: PortableGit/opt/cmake-3.17.1-win32-x86
At this point, you can add the cmake-3.17.1-win32-x86/bin folder to your path. (Assuming that this won't cause any conflicts.) If you do so, you will not have to constantly specify the cmake executable directory to run it. This is up to your discretion.
Part 2: Build OpenCV
Navigate to the opencv directory and create a build folder and cd into it.
mkdir build && cd build
Run the following export commands.
export CC=/PortableGit/MinGW-w64/mingw32/bin/gcc.exe
export CXX=/PortableGit/MinGW-w64/mingw32/bin/g++.exe
This is to make sure the next cmake command uses the proper compilers.
Run the following cmake command from within that folder:
PortableGit/opt/cmake-3.17.1-win32-x86/cmake.exe -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DOPENCV_VS_VERSIONINFO_SKIP=1 -DOPENCV_EXTRA_MODULES_PATH="/PortableGit/opt/opencv-4.3.0/opencv_contrib/modules/" ..
The -G flag specifies that we are creating build files for the MinGW compiler
The -DCMAKE_BUILD_TYPE=Release specifies that we are building the release version of opencv and not the debug version.
The DOPENCV_EXTRA_MODULES_PATH needs to be set to the modules folder inside the opencv_contrib folder. For me it was PortableGit/opt/opencv-4.3.0/opencv_contrib/modules
The DOPENCV_VS_VERSIONINFO_SKIP specifies to not include version info. If not set, the compiler will throw an error complaining about not having version files. (Shown below for reference.)
gcc: error: long: No such file or directory
mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1341:
modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
If successful, the cmake command will finish like this:
Now run this command, again from the build folder: /PortableGit/opt/MinGW-w64/mingw32/bin/mingw32-make.exe -j7
mingw32-make.exe is the windows equivalent of the Linux make command.
The -j7 option run the process with a maximum of 7 threads.
This will take a while! It took my laptop ~20 minutes to complete
If the make command ends in an error, make sure to reset your build directory before continuing any troubleshooting. This is done through this series of commands
rm -rf build
mkdir build
cd build
Part 3: Using OpenCV
To use the opencv library that you just compiled in a project of your own, compile the project with these flags from your projects main directory.
Remember that your compiler now has to be set to the mingw-w64 compiler for opencv support.
I added indentation and newlines for readability, but when entering this in the terminal do not include the newlines or indents.
The number at the end of the linker options may change depending on the version of opencv you downloaded. I downloaded opencv-4.3.0, making my number 430, but yours may be different.
PortableGit/opt/MinGW-w64/bin/g++.exe
-I../../PortableGit/opt/opencv-4.3.0/include/
-I../../PortableGit/opt/opencv-4.3.0/build/
-I../../PortableGit/opt/opencv-4.3.0/modules/core/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/calib3d/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/dnn/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/features2d/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/flann/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/gapi/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/highgui/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/imgcodecs/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/imgproc/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/ml/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/objdetect/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/photo/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/stitching/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/ts/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/video/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/videoio/include/
-I../../PortableGit/opt/opencv-4.3.0/modules/world/include/
-L../../PortableGit/opt/opencv-4.3.0/build/lib/
*.hpp
*.cpp
-lopencv_calib3d430
-lopencv_core430
-lopencv_dnn430
-lopencv_features2d430
-lopencv_flann430
-lopencv_highgui430
-lopencv_imgcodecs430
-lopencv_imgproc430
-lopencv_ml430
-lopencv_objdetect430
-lopencv_photo430
-lopencv_stitching430
-lopencv_video430
-lopencv_videoio430
-o
main
Or you could download VS. Up to you. Hope this helps.
Correction for JackCamichael's answer
those 2 commands won't work in Windows
export CC=/PortableGit/MinGW-w64/mingw32/bin/gcc.exe
export CXX=/PortableGit/MinGW-w64/mingw32/bin/g++.exe
This should be
setx -m CC C:\msys64\mingw64\bin\gcc.exe
setx -m CXX C:\msys64\mingw64\bin\g++.exe
C:\msys64\mingw64\bin is mingw64 path on my machine

Link Errors w/ SFML 2.4 (C++)

For a while now, I have been trying to use the SFML library for C++.
However, whenever I try to run my program, I get a slew of build errors revolving around undefined symbols. I am building from Visual Studio and I have added the include directory, the additional libraries, and the all the DLLs in bin into BOTH the source directory and the build directory. Still, I cannot get the program to build.
My Code:
#include <SFML\Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(640, 380), "Test Window");
while (window.isOpen()) {
// events
window.clear();
// drawing
}
system("pause");
}
Errors:
Include Directories: SFML-2.4.2/include
Lib Directories: SFML-2.4.2/lib
Linker Input:
sfml-main-d.lib
sfml-graphics-d.lib
sfml-window-d.lib
sfml-system-d.lib
sfml-audio-d.lib
sfml-network-d.lib
I know this is like one and a half year old but I had the same errors and I have resolved them.
The following Pastebin files are my config and task files which(in my case work fine with Visual Studio Code Version 1.32.3 read the bottom for what you will have to change)
Date:2019-03-14
Electron:3.1.6
Chrome:66.0.3359.181
Node.js:10.2.0
V8:6.6.345.32
Os: Windows_NT x64 10.0.17134
c_cpp_properties.json: https://pastebin.com/3gw8J4d2``
task.json: https://pastebin.com/s1rjswWG``
IMPORTANT:
change the following:
(If you have MinGW installed on the standard path)
c_cpp_properties.json: K:/libs/SFML-2.5.1/include has to be changed
to your installation path of SFML be sure to change it in the browse path too!!!
tasks.json:
"-IK:/libs/SFML-2.5.1/", change K:/libs/SFML-2.5.1/include to your
installation path of SFML
"-LK:/libs/SFML-2.5.1/lib", change K:/libs/SFML-2.5.1/lib again to
your installation path of SFML
a few mistakes I made:
I didn't delete the K: in "-LK:/libs/SFML-2.5.1/lib"
I didn't have g++ in command at the top of tasks.json
I didn't use the right compiling/link paths (search for all paths you
use in your browser before giving up)
A few helpful Links:
https://www.sfml-dev.org/download/sfml/2.5.1/ (for MinGW be sure to
select GCC 7.3.0 MinGW (DW2) - 32-bit)
https://code.visualstudio.com/docs/languages/cpp (Documentation on
how to compile in Vs with c++)
https://discordapp.com/invite/nr4X7Fh (Discord Server of SFML where
are a lot of helpful people for the library)
I hope I helped
If you have any question you can message me on Reddit u/Spagetti_Lord (most active)

Xcode External Build System Project Can't Find wchar.h

I'm trying to figure out how to use Xcode's "External Build System" project template to do some C++ coding. I've set it up with a very simple test project, just to make sure that I understand the configuration. I'm using make to build the project. When I try to run it, the build fails with the error message 'wchar.h' file not found.
Here are the steps I took to set up the project:
Create a new Project, using the Other -> External Build System template.
Set the Build Tool option to /usr/bin/make.
Copy my source file, ex_3_4.cpp to the directory where the Xcode project is located, and add it to the project using the Add files to "TestProject"... menu option.
Copy the makefile to the directory where the Xcode project is located.
Everything works if I run make from the terminal - I get an executable that runs fine, and there is no trouble finding wchar.h or any other headers. So I know that this is a problem with something in the project settings.
Here is the code in the source file:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!\n";
}
And here is my makefile:
all:
clang++ ex_3_4.cpp -o ex_3_4
clean:
rm ex_3_4
I can't find any place in the project settings where I can specify a search path for the wchar.h file (or any other header files for that matter), so I'm not sure how to fix this. I feel like it must be something simple.
If it makes any difference, I've been using Xcode 7.3, but I've also tried it with the new Xcode 8.0. I get the same error message using either version.
Perhaps you want to add a library target to your project, add it as a dependency on your project and then, your .h into the Headers section

Cygwin won't compile any c++ files

When I try to compile my Fibonacci.cpp file I get this from the compiler:
$ g++ Fibonacci.cpp
C:/cygwin/lib/gcc/i686-pc-cygwin/4.9.3/cc1plus.exe: error while loading shared libraries: cygcloog-isl-4.dll: cannot open shared object file: No such file or directory
I've downloaded the gcc-g++: GNU Compiler Collection (C++) library and it's not working. Am I missing another library?
You need to install the libcloog-isl4 package when you run the setup.exe. You are missing that file in your C:/cygwin64/bin directory. I had the same problem and I was also missing cygisl-10.dll and I had to install libisl10 package.
See this cannot compile anything with gcc on cygwin32; missing cygisl-10.dll.
Unfortunately I'm getting a different error now that I solved that, so I'm not guaranteeing a fix.

Makefile which link to library in C++

Recently, I try to create an makefile as below:
all:
g++ test.cpp -o Test
It creates an runnable Test. However, If I try to link it to an library (as LibCurl to use SSL connetion):
all:
g++ test.cpp -o Test -lcurl
It goes wrong (I already installed libcurl4-openssl-dev package as standard library)!
What does I miss? Can you give any solution? Thanks!!
Edit: The error is below:
fatal error: curl.h: No such file or directory
I guess, you need fix your sources:
#include <curl/curl.h>
The header files are missing in the include search path.
You will have install the development package of libcurl.
For example, install libcurl-devel-7.19.0-11.1.x86_64.rpm for Open Suse 11.1.
To know the list of files that would be installed by the rpm, download the rpm, type the following command in the downloaded dir.
rpm -qlp <rpmname>
As per the example above, the command would be
rpm -qlp libcurl-devel-7.19.0-11.1.x86_64.rpm
This will list the files along with the path in which it would be installed to.
In our example, the result would look like..
/usr/include/curl /usr/include/curl/curl.h /usr/include/curl/curlbuild.h
/usr/include/curl/curlrules.h
/usr/include/curl/curlver.h and so on...
and
Install the development libcurl package for the version of linux you use and include #include <curl/curl.h> in your code.
Refer http://curl.haxx.se/download.html to download the right one