Build 32 bit app from 64 bit development system
-
- CodeLite Curious
- Posts: 7
- Joined: Fri Oct 31, 2014 8:26 pm
- Genuine User: Yes
- IDE Question: c++
- Contact:
Build 32 bit app from 64 bit development system
Howdy. Running codelite 6.1 on my 64 bit linux wheezy system. Need to create the app to run on a 32 bit system but cannot find anywhere in the ide how to set the -m32 g++ compiler switch. Any suggestions?
- eranif
- CodeLite Plugin
- Posts: 6375
- Joined: Wed Feb 06, 2008 9:29 pm
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: Build 32 bit app from 64 bit development system
Hi,
There are number of ways of achieving this, I will name some:
1. Open the project settings dialog -> common settings-> compiler and simply add "-m32" to the "compiler options" field
2. You can create a new compiler with this flag enabled:
* settings->build settings->compilers->add compilers->clone an existing compiler
* give the compiler a name + select the compiler to clone
* after the new compilers is added to the list of compilers, click it and select the "Tools" tab (the first tab on the left)
* in the "C compiler" and "C++ compilers" field simply append -m32 to the tool path
Eran
There are number of ways of achieving this, I will name some:
1. Open the project settings dialog -> common settings-> compiler and simply add "-m32" to the "compiler options" field
2. You can create a new compiler with this flag enabled:
* settings->build settings->compilers->add compilers->clone an existing compiler
* give the compiler a name + select the compiler to clone
* after the new compilers is added to the list of compilers, click it and select the "Tools" tab (the first tab on the left)
* in the "C compiler" and "C++ compilers" field simply append -m32 to the tool path
Eran
Make sure you have read the HOW TO POST thread
-
- CodeLite Curious
- Posts: 7
- Joined: Fri Oct 31, 2014 8:26 pm
- Genuine User: Yes
- IDE Question: c++
- Contact:
Re: Build 32 bit app from 64 bit development system
Outstanding, eranif, your method #1 worked great. Thank you.
-
- CodeLite Curious
- Posts: 7
- Joined: Fri Oct 31, 2014 8:26 pm
- Genuine User: Yes
- IDE Question: c++
- Contact:
Re: Build 32 bit app from 64 bit development system
This is a simple console application.
When I build from the command line using
g++ main.cpp -Wall -m32 -o interleave
everything works fine.
When I just compile the source from within codelite with the -m32 flag there are no errors.
However when I try to build with codelite I get a ton of errors.
My build window is:
/bin/sh -c '/usr/bin/make -j2 -e -f Makefile'
----------Building project:[ Interleave - Debug ]----------
make[1]: Entering directory `/home/nick/CODELITEProjects/Interleave'
/usr/bin/g++-4.7 -c "/home/nick/CODELITEProjects/Interleave/main.cpp" -g -O0 -Wall -m32 -o ./Debug/main.cpp.o -I //usr/include/glib-2.0/ -I /.
/usr/bin/g++-4.7 -o ./Debug/Interleave @"Interleave.txt" -L.
/usr/bin/ld: i386 architecture of input file `./Debug/main.cpp.o' is incompatible with i386:x86-64 output
./Debug/main.cpp.o: In function `loadmusicfolders()':
/home/nick/CODELITEProjects/Interleave/main.cpp:107: undefined reference to `std::string::find(char const*, unsigned int) const'
/home/nick/CODELITEProjects/Interleave/main.cpp:114: undefined reference to `std::string::assign(std::string const&, unsigned int, unsigned int)'
/home/nick/CODELITEProjects/Interleave/main.cpp:122: undefined reference to `operator new(unsigned int)'
/home/nick/CODELITEProjects/Interleave/main.cpp:161: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o: In function `CreateInterleavedList()':
/home/nick/CODELITEProjects/Interleave/main.cpp:246: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o: In function `__gnu_cxx::new_allocator<std::string>::allocate(unsigned int, void const*)':
/usr/include/c++/4.7/ext/new_allocator.h:94: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o: In function `__gnu_cxx::new_allocator<ThisMusicFolder*>::allocate(unsigned int, void const*)':
/usr/include/c++/4.7/ext/new_allocator.h:94: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o:/usr/include/c++/4.7/ext/new_allocator.h:94: more undefined references to `operator new(unsigned int)' follow
collect2: error: ld returned 1 exit status
make[1]: *** [Debug/Interleave] Error 1
make[1]: Leaving directory `/home/nick/CODELITEProjects/Interleave'
make: *** [All] Error 2
9 errors, 0 warnings
It builds just fine without the -m32 flag.
Here's some of the code:
typedef struct {
string FolderName;
vector<string> FilesInThisFolder;
} ThisMusicFolder;
string AMusicFile;
vector<string> AllMusicFiles;
string FolderName;
vector<ThisMusicFolder *> AllMusicFolders;
vector<ThisMusicFolder *>::iterator PointerToLargestFolderInAllMusicFolders;
vector<ThisMusicFolder *>::iterator Pos;
vector<ThisMusicFolder *>::iterator allPos;
vector<string>::iterator strPos;
vector<string>::iterator filesPos;
int endoffoldername;
endoffoldername = AMusicFile.find("/",0); //main.cpp:107
if (endoffoldername == -1) {
continue;
}
My codelite, now version 7.0, came from the debian linux repository.
Any ideas?
When I build from the command line using
g++ main.cpp -Wall -m32 -o interleave
everything works fine.
When I just compile the source from within codelite with the -m32 flag there are no errors.
However when I try to build with codelite I get a ton of errors.
My build window is:
/bin/sh -c '/usr/bin/make -j2 -e -f Makefile'
----------Building project:[ Interleave - Debug ]----------
make[1]: Entering directory `/home/nick/CODELITEProjects/Interleave'
/usr/bin/g++-4.7 -c "/home/nick/CODELITEProjects/Interleave/main.cpp" -g -O0 -Wall -m32 -o ./Debug/main.cpp.o -I //usr/include/glib-2.0/ -I /.
/usr/bin/g++-4.7 -o ./Debug/Interleave @"Interleave.txt" -L.
/usr/bin/ld: i386 architecture of input file `./Debug/main.cpp.o' is incompatible with i386:x86-64 output
./Debug/main.cpp.o: In function `loadmusicfolders()':
/home/nick/CODELITEProjects/Interleave/main.cpp:107: undefined reference to `std::string::find(char const*, unsigned int) const'
/home/nick/CODELITEProjects/Interleave/main.cpp:114: undefined reference to `std::string::assign(std::string const&, unsigned int, unsigned int)'
/home/nick/CODELITEProjects/Interleave/main.cpp:122: undefined reference to `operator new(unsigned int)'
/home/nick/CODELITEProjects/Interleave/main.cpp:161: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o: In function `CreateInterleavedList()':
/home/nick/CODELITEProjects/Interleave/main.cpp:246: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o: In function `__gnu_cxx::new_allocator<std::string>::allocate(unsigned int, void const*)':
/usr/include/c++/4.7/ext/new_allocator.h:94: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o: In function `__gnu_cxx::new_allocator<ThisMusicFolder*>::allocate(unsigned int, void const*)':
/usr/include/c++/4.7/ext/new_allocator.h:94: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o:/usr/include/c++/4.7/ext/new_allocator.h:94: more undefined references to `operator new(unsigned int)' follow
collect2: error: ld returned 1 exit status
make[1]: *** [Debug/Interleave] Error 1
make[1]: Leaving directory `/home/nick/CODELITEProjects/Interleave'
make: *** [All] Error 2
9 errors, 0 warnings
It builds just fine without the -m32 flag.
Here's some of the code:
typedef struct {
string FolderName;
vector<string> FilesInThisFolder;
} ThisMusicFolder;
string AMusicFile;
vector<string> AllMusicFiles;
string FolderName;
vector<ThisMusicFolder *> AllMusicFolders;
vector<ThisMusicFolder *>::iterator PointerToLargestFolderInAllMusicFolders;
vector<ThisMusicFolder *>::iterator Pos;
vector<ThisMusicFolder *>::iterator allPos;
vector<string>::iterator strPos;
vector<string>::iterator filesPos;
int endoffoldername;
endoffoldername = AMusicFile.find("/",0); //main.cpp:107
if (endoffoldername == -1) {
continue;
}
My codelite, now version 7.0, came from the debian linux repository.
Any ideas?
- eranif
- CodeLite Plugin
- Posts: 6375
- Joined: Wed Feb 06, 2008 9:29 pm
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: Build 32 bit app from 64 bit development system
Its not really related to codelite. You need to search your linker man page to see if you are missing some flags
Eran
Eran
Make sure you have read the HOW TO POST thread
-
- CodeLite Plugin
- Posts: 819
- Joined: Wed Sep 03, 2008 7:26 pm
- Contact:
Re: Build 32 bit app from 64 bit development system
Hi,
Don't you need to pass -m32 to the linker too?
Regards,
David
Don't you need to pass -m32 to the linker too?
Regards,
David
-
- CodeLite Curious
- Posts: 7
- Joined: Fri Oct 31, 2014 8:26 pm
- Genuine User: Yes
- IDE Question: c++
- Contact:
Re: Build 32 bit app from 64 bit development system
Thank you DaviGH, you were exactly right. I was thrown off by the fact that the cli build worked without having to say anything to the linker, just g++ ... -m32.