Compiling Z3 test examples gives build error - z3

I've compiled Z3 from sources at codeplex. Configuration details:
Operation system Debian 5.0 (Lenny)
GLIBC 2.7
GCC 4.4.3
OpenMP 4.3.4 (package version)
When I try to build the c example I get:
../../lib/libz3.so: undefined reference to `std::ctype<char>::_M_widen_init() const#GLIBCXX_3.4.11'
When I try to build the c++ example I get:
../../lib/libz3.so: undefined reference to `omp_init_nest_lock#OMP_3.0'
../../lib/libz3.so: undefined reference to `omp_unset_nest_lock#OMP_3.0'
../../lib/libz3.so: undefined reference to `omp_set_nest_lock#OMP_3.0'
../../lib/libz3.so: undefined reference to `omp_destroy_nest_lock#OMP_3.0'.
The examples mentioned were downloaded previously from Z3 website. When I build the test_capi example, which comes along with the source code, I get the union of the error messages above.
What is the nature of the problem? Are there any prerequisites for the system for using Z3?
On another Debian 6.0 machine everything goes smoothly.
Thanks in advance.

I'm assuming you are using the official src release or master branch. If that is the case, could you try to compile test_capi using in the test_capi directory?
gcc -o test_capi -I ../lib test_capi.c -L ../bin/external -lz3 -lstdc++ -lgomp
In the command above we are explicitly telling gcc to link with the C++ standard and OMP libraries.
For the c++ example, you just need to include -lgomp, since g++ will link with the C++ standard library by default. You can find other missing dependencies using ldd:
ldd ../bin/external/libz3.o
That being said, I'm working on a new build system for Z3, you can try it by getting the unstable branch from codeplex. Could you give a try? It would be great to have your feedback to make the build to go smoothly in many more platforms.

Related

How to build clang with the memtag sanitiser enabled

I have spent a few hours trying to get the built-from-sources version of clang (v15) to work with the memtag sanitiser. For those of you who don't know what that is, it is simply a version of the address sanitiser that leverages the Memory Tagging features of ARM.
Anyway, while I can use it normally with the repository version of clang (v10), using the version built from sources just does not work.
Here is the command I use for both: clang main.c -S -march=armv8+memtag -fsanitize=memtag with clang which is either the repository-version or the built-from-sources version. Although the former works seamlessly, the latter does not.
I've tried to built llvm with different parameters, but none seemed to have done the trick. Here's my current building configuration:
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb;openmp;polly;pstl;compiler-rt" -DLLVM_TARGETS_TO_BUILD="AArch64" ../llvm
I wonder if there is some parameter I have to specify to build clang with this sanitiser enabled.
PS: using the -fsanitize=memtag flag does not give any error: with the built version of clang it simply does not insert the instrumentation code.
If anybody is able to give me some insight I would really appreciate it. Thanks ;)

clang/llvm compile fatal error: 'cstdarg' file not found

Trying to convert a large gcc/makefile project into clang. Got it roughly working for x86, but now I'm trying to get cross compilation working.
The way it currently works is that we use Linaro's 7.1.1 arm compiler alongside its companion sysroot directory for base libraries/headers. I installed clang-6.0 and then the base clang(not sure if that mattered).
I used some commands I found to redirect clang to clang-6.0 and when I execute 'clang -v' and got
clang version 6.0.0-1ubuntu2~16.04.1 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
....
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/9
....
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6.5.0
....
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0
Candidate multilib: .;#m64
Selected multilib: .;#m64
It does not find the current compiler we use which is at
/usr/local/gcc-linaro-7.1.1-2017.08-i686_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++(also a directory for *x86_64*)
I only found references to setting --sysroot, but not to a specific compiler. Definitely still lost about the relationship between clang+llvm+other compilers. I even saw somewhere saying I needed to compile llvm before I could use it?
I very roughly made changes in our make files to get the following output, basically all I had to add was '-target arm-linux-gnueabuhf' and reordered the mcpu/mfloat/marm/march so they came after -target in case it mattered
clang --sysroot=/usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf -c -std=c++0x
-g -DDEBUG_ON -target arm-linux-gnueabihf -mcpu=cortex-a7 -mfloat-abi=hard -marm -march=armv7ve
-Wall -fexceptions -fdiagnostics-show-option -Werror .... -I/usr/local/gcc-linaro-7.1.1-2017.08-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/include .... and many more
I think the problem probably lies with the change I made which is the actual 'clang' call that replaced
/usr/local/gcc-linaro-7.1.1-2017.08-i686_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ ....
End up with
fatal error: 'cstdarg' file not found
#include <cstdarg>
As said before I can already cross-compile with gcc, so I've already come across issues with std libraries that require 'build-essentials', 'g++-multilibs', etc. So they're already installed.
Looked and really haven't found anything too useful to me, I'm on linux mint 18.3 and the closest things I found were issues people had on mac and windows.
So I came across some posts mentioning setting --gcc-toolchain=/your/choice/of/cross/compiler but they also mention it not working. I discovered that if you combine this with the installation of llvm-6.0-dev(or maybe llvm-6.0-tools, tools installed dev so not 100%) it at least worked for me.
Any compiler clang or gcc needs to know where a header file is defined. The standard headers, standard libraries, c-runtime, and libc are all packaged together for each target e.g., arm64, x86 in a directory called 'sysroot'. When we compile a program we need to pass the path to sysroot for a compiler to know where to look for standard headers during compilation, and where to look for common libraries (libc, libstdc++ etc) during linkage.
Normally when we compile a program for the same machine the compiler uses the standard headers available in '/usr/include' and libraries from '/usr/lib'. When cross-compiling programs we should supply the sysroot as compiler flag. e.g. gcc --sysroot="/path/to/arm64/sysroot/usr" test.cpp. Same for clang. Most often pre-packaged cross compilers come with a script/binary that has 'sysroot' path embedded into it. e.g., aarch64-linux-gnu-gcc (https://packages.ubuntu.com/xenial/devel/gcc-aarch64-linux-gnu).
... the closest things I found were issues people had on mac and windows.
On mac the clang compiler will have the similar configuration as linux. So the details you found there should be totally applicable to yours.
More details on sysroot and cross-compilation:
https://elinux.org/images/1/15/Anatomy_of_Cross-Compilation_Toolchains.pdf

MinGW doesn't recognize the directory opencv

I write a code using opencv library, I used codeblocks ide configuring it to work with opencv (configuring linker settings and search directory and including all the necesary path to enviroment variable) correctly and then the program works fine. The problem is when I try to compile using minGW with g++ 6.3.0 version, it gave me the next error:
ImgSeg.cpp:2:39: fatal error: opencv2/imgproc/imgproc.hpp: No such file or
directory
#include <opencv2/imgproc/imgproc.hpp>
^
compilation terminated.
I try all possible form to put the opencv2 directory in enviroment variable but it has the same error all the time, it's a little frustrating. this is what I have on path in enviroment variable:
C:\opencv_install\lib;
C:\opencv_install\include;
C:\opencv_install\bin;
I'm using windows 7 64 and opencv 2.4.9
GCC does not search PATH when looking for include files.
You will need to tell it where to look by using the -I commandline parameter:
-IC:\opencv_install\include
When linking, you'll also need to tell GCC where to find the libraries you're linking:
-LC:\opencv_install\lib -lopencv_core
In CodeBlocks you'll need to add the former to include directories (not PATH) in the project settings.
Finally I could compile the program but I had to install mingw64 version 4.9.2 from this link. The command that I use to compile was this:
g++ -std=c++11 "name of the program.cpp" -IC:/opencv_install/include -LC:/opencv_install/lib -llibopencv_core249 -llibopencv_highgui249 -llibopencv_imgproc249 -o "name of the exe"
It's important include the -l lib that you used in the program

OpenCV functions are undefined when building packages for ROS, how do I add `pkg-config opencv --cflags --libs` to catkin build?

I have some problems with getting OpenCV-3.1.0 working (directly) with catkin build. I am trying to build a workspace of the TIAGo Simulation, but I get errors.
When I build a test file (containing opencv functions) with g++ and flags I have no problems:
g++ -o test test.cpp ´pkg-config opencv --cflags --libs´
If I don´t use the flags I get errors:
g++ -o test test.cpp
output:
test.cpp:(.text+0x3e): undefined reference to `cv::imread(cv::String const&, int)'
The same is happening when I´m building the TIAGo Simulation workspace that uses OpenCV when using catkin build.
Trying to build the TIAGo simulation:
catkin build
output (one of the errors):
look_to_point.cpp:(.text+0xa6): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
So since the errors are quite similar I think it could be solved by adding the equivalent of ´pkg-config opencv --cflags --libs´ to catkin build. Since I am quite unexperienced with ROS, catkin, and CMake I don´t know how to accomplish this.
If anyone wants to point me in the right direction I would be very grateful.
It's Better To Use CMake To Build The Packages For ROS (Even When You Have a Single Source file) And the Easiest way to do That Is The Command catkin_create_package (Might Be Different In Your ROS Distro) And Adding all The Libraries In The CMakeList.txt and Package.xml That The Command Generates(Almost Everything is Commented Out At The Start) So That Later On You Can Find And Use It In Your ROS Environment.
Here The Link To ROS Wiki Page For Catkin
And Here's An Example That I Used back Then When I had less Experience With Catkin In Github
It eventually turned out to be OpenCV version problem.
Before I found out it was a version problem I tried to add the OpenCV library to every package that needed it by writing it in every CMakeList.txt (there were multiple packages).

Error installing llvm and clang from source in Linux

I am trying to install clang from source following the instructions as given in http://clang.llvm.org/get_started.html ( Steps 1-4 and 7) in Ubuntu 14.04
Inside the build directory , I ran make which succeeded. I wasn't sure what to do after that , so I ran make install inside the build directory, following which I got this cmake error:
There is no executable named clang in /build/bin folder anyway, but I can find others like clang-check, clang-query, etc. What's going wrong?
PS: My main requirment is to experiment with alpha security checkers of clang analyzer and also write my own checker later.

Resources