Compiling libJPEG with Alchemy (-swc) - gcc

I have tried for a few days to compile -swc with -ljpeg but have not had any luck.
Here is what i have been doing.
in my jpeg_sample_linker.c, it has two headers
#include "AS3.h"
#include <jpeglib.h> //or #include "jpeglib.h"
and the rest of the file is pretty much empty but compilable(because all i want to do is to compile the file with the headers first).
And my gcc command is:
alc-on
gcc -swc -ljpeg jpeg_sample_linker.c -o jpeg_sample_linker.swc
alc-off
And, gcc keeps on saying it cannot locate libjpeg.h
i have also tried
alc-on
gcc -swc -I/usr/local/include -L/usr/local/lib -ljpeg jpeg_sample_linker.c -o jpeg_sample_linker.swc
alc-off
It still reported the same error "error: jpeglib.h: No such file or directory".
May i know how i could fix this compilation error?
Billion thanks
G

What a bummmer,
the compilation can be solved by editing gcc in /Library/alchemy-darwin-v0.5a/achacks
or
moving everything in /usr/local/lib and /usr/local/include to
to $ALCHEMY_HOME/usr/local/include and $ALCHEMY_HOME/usr/local/lib
!

Related

omp.h' file not found while compiling source code

I am trying to compile this this source code (https://sites.google.com/site/bgcsoftware/) on a mac. I installed both hdf5 and gsl using homebrew.
Would you know what the problem might be?
Thank you in advance!
h5c++ -Wall -O2 -o bgc bgc_main.C bgc_func_readdata.C bgc_func_initialize.C bgc_func_mcmc.C bgc_func_write.C bgc_func_linkage.C bgc_func_ngs.C bgc_func_hdf5.C mvrandist.c -lgsl -lm
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
bgc_main.C:17:10: fatal error: 'omp.h' file not found
#include <omp.h>
^~~~~~~
1 error generated.
bgc_func_mcmc.C:12:10: fatal error: 'omp.h' file not found
#include <omp.h>
^~~~~~~
1 error generated.
It looks like clang is the actual compiler being used. When compiling OpenMP with clang you need to pass the -fopenmp flag.
Try adding the -fopenmp flag like this:
h5c++ -fopenmp -Wall -O2 -o bgc \
bgc_main.C bgc_func_readdata.C bgc_func_initialize.C \
bgc_func_mcmc.C bgc_func_write.C bgc_func_linkage.C \
bgc_func_ngs.C bgc_func_hdf5.C mvrandist.c -lgsl -lm
The -fopenmp flag tells the compiler replace the code marked with #pragma omp ... with generated parallel code and should automatically add the correct -I include flags behind the scenes.
You should be able to run
h5c++ --help | grep openmp
To see other openmp related flags, depending on your compiler/OS.
adding -fopenmp did not help. However, the original code did run when I installed:
brew install --build-from-source libomp

How can I configure gcc that oneself find required my own static library?

I have my own library libname.a in /usr/local/lib and header nameheader.h in /usr/local/include. I can compile code with gcc code.c -I/usr/local/include -L/usr/local/lib -llibname -o code.o But, if I try to build code without these options, gcc return an error. Why?
How can I tell to gcc where library and header located?
Please go through the below link it describes all process with example code.
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Compile C++ code containing OpenMP with manually built gcc compiler

I've downloaded from github and built gcc. After that I've tried to compile a code with OpenMP:
../GCC/build/gcc/xgcc -B./../GCC/build/gcc/ -I./../GCC/build/x86_64-unknown-linux-gnu/libgomp -Wno-write-strings -O3 -Wall -fopenmp -lpng -o mandelbrot-omp mandelbrot-omp.cpp​
Then I got the following error message:
xgcc: error: libgomp.spec: No such file or directory​
I've checked and found out that libgomp directory contains the libgomp.spec file. The directory is included with -I option. What's wrong?

I'm having an issue linking the standard crt when using clang in linux with c++

I'm working on porting a windows project to linux so I am trying to learn/setup my build pipeline on linux(ubuntu). I use clang on windows and would like to use clang/llvm to compile my code on ubuntu but I am having an issue linking the c runtime library to my code. Here's an example of what I am trying to run just so I can set up the build scripts,
// -- system includes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// -- my includes
#include "crt.h"
int main() {
char title[] = "Text";
int title_length = strlen(title);
// -- sending string and length to platform dependent code
CreateBox(title, title_length);
return(0); }
After installing clang 3.4 on Ubuntu 14.04 LTS I run the above code as well as platform dependent code from the terminal,
clang++ -c main.cpp box_linux.cpp
The file compiles without error. Let's say I had I use the following command when trying to link,
ld main.o box.o
I get back the following error every single time,
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
In function 'main':
(.text+0x30): undefined reference to 'strlen'
I try linking libc++, libstdc++ but nothing seems to work. I am admittedly very, very new to linux and clang on linux so I apologize in advance. I have checked different questions here on stackoveflow as well as ubuntu's forums and LLVM's forums/docs to no avail. If anyone could point me in the right direction it would be greatly appreciated.
If you are using clang (or gcc) on linux you don't have to do the linking on your own. You can let clang do the linking for you and it will select the necessary libraries for your system just remove the -c flag form command line or use clang main.o. Clang understands that a .o file is already an object file and passes it on to the linker.
If you realy want to invoke ld on your own then start with clang++ -v main.cpp. The -v switch let clang print the invocation command for ld which e.g., looks like this:
/usr/bin/ld" -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.8 -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../.. -L/data/home/user/bin/../lib -L/lib -L/usr/lib /tmp/test-574b88.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/4.8/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o
on my Ubuntu 14.04 LTS.

Link error on Mac OSX 10.6.7

I'm seeing:
ld: in objs/AttributeValueTest.o, can't link with a main executable for architecture x86_64
When building a very simple program which has only 1 .h and 1 .cpp file.
The compile lines are:
g++ -g -I./ -I/usr/local/include -o objs/AttributeValueTest.o tp_datastruct/tests/AttributeValueTest.cpp -L/usr/local/lib -lavrocpp -lcppunit -lm
g++ -g -I./ -I/usr/local/include -o AttributeValueTest objs/AttributeValueTest.o -L/usr/local/lib -lavrocpp -lcppunit -lm
I tried to specify -arch x86_64, -arch i386 and -m32, but nothing worked (I got other errors, it was complaining that libcppunit was not in the right format).
Any idea/pointer/suggestion?
Thanks!
Very strange. I did some digging around, and saw somewhere that AttributeValueTest.o might be an executable already. I did a "file" on that AttributeValueTest.o, and sure enough, it is a ready-to-go executable. I modified my makefile to rename that .o into AttributeValueTest, and I can happily run it. Also, the executable comes with a ".dSYM" directory, which I can remove without any problem... I don't understand what is going on, but I can run my executable now...
You forgot to specify -c option to the g++ to compile a source code into object file. So it is getting compiled and linked into executable file. Then you are trying to link executable into executable, which fails. From the gcc's manual page:
-c Compile or assemble the source files, but do not link. The
linking stage simply is not done. The
ultimate output is in the form of an
object file for each source file.
By default, the object file name for a source file is made by
r> eplacing the suffix .c, .i, .s, etc.,
with .o. Unrecognized input files, not
requiring compilation or assembly, are
ignored.

Resources