www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - object.d: Error: module object is in file 'object.d' which cannot be read

reply Ishan Thilina <ishanthilina gmail.com> writes:
When I give "dmd untitled.d" command in my ubuntu maverick 64 bit laptop I get
the following error.

"
object.d: Error: module object is in file 'object.d' which cannot be read
import path[0] = /etc/../../src/phobos
import path[1] = /etc/../../src/druntime/import
"

I tried all morning to solve this problem, tried every google result I could
find. Checked the mail archive to solve this problem. But I still couldn't get
rid of that error.I anybody can help me, it would be a great help.

I followed the steps in http://www.digitalmars.com/d/2.0/dmd-linux.html .I
first used the command "cp dmd2/linux/bin/dmd.conf /etc
" . Then I gave "sudo apt-get install gcc-multilib g++-multilib libc6-i386
libc6-dev-i386" command.

Thank you :)
Mar 27 2011
next sibling parent reply Trass3r <un known.com> writes:
 object.d: Error: module object is in file 'object.d' which cannot be read
 import path[0] = /etc/../../src/phobos
 import path[1] = /etc/../../src/druntime/import

As you can see dmd.conf uses relative paths. That guide needs an overhaul. The easiest way is to copy the contents of the zip archive into some local dmd directory and add dmd/linux/bin to your PATH. (i.e. remove your etc/dmd.conf for now)
Mar 27 2011
next sibling parent Ishan Thilina <ishanthilina gmail.com> writes:
Trass3r wrote:

As you can see dmd.conf uses relative paths.
That guide needs an overhaul.

The easiest way is to copy the contents of the zip archive into some local
dmd directory and add dmd/linux/bin to your PATH.
(i.e. remove your etc/dmd.conf for now)

I did as you have said. Now a new error comes :-/. "object.d: Error: module object is in file 'object.d' which cannot be read Specify path to file 'object.d' with -I switch " Spir: I think you have not understood what my problem is. I'm not trying to solve a problem with my source code. I'm having an issue in which I can'ct compile code( I have compiled them using dmd in windows and they can be compiled in linux using GCD)
Mar 27 2011
prev sibling parent Trass3r <un known.com> writes:
 "object.d: Error: module object is in file 'object.d' which cannot be  
 read
 Specify path to file 'object.d' with -I switch
 "

Could it be you also deleted the dmd.conf in the local dmd/linux/bin?
Mar 27 2011
prev sibling next sibling parent reply spir <denis.spir gmail.com> writes:
On 03/27/2011 12:28 PM, Ishan Thilina wrote:
 When I give "dmd untitled.d" command in my ubuntu maverick 64 bit laptop I get
 the following error.

 "
 object.d: Error: module object is in file 'object.d' which cannot be read
 import path[0] = /etc/../../src/phobos
 import path[1] = /etc/../../src/druntime/import
 "

 I tried all morning to solve this problem, tried every google result I could
 find. Checked the mail archive to solve this problem. But I still couldn't get
 rid of that error.I anybody can help me, it would be a great help.

 I followed the steps in http://www.digitalmars.com/d/2.0/dmd-linux.html .I
 first used the command "cp dmd2/linux/bin/dmd.conf /etc
 " . Then I gave "sudo apt-get install gcc-multilib g++-multilib libc6-i386
 libc6-dev-i386" command.

 Thank you :)

First, please always post the piece of code that provokes an error. If it's a big or complicated thing, then try to reduce it to the smallest and simplest bit possible. Usually, doing this will let you find the source of the problem ;-) Second, this kind of error is caused by wrong import path (yes, the error message could mention "import"). Typically, when one writes eg: import range; instead of import std.range; But your case is strange. Do you know object.d is the core of D's std lib, which defines about all what you absolutely need to use when programming in D? One does not need to import it, this is automatical. Also, the message says the error happens in object.d itself, which is very un-probable. I thus suspect you named one of your own modules "object.d", which breaks the import mechanics (for D's standard object.d and possibly for other stdlib/phobos modules). This may be considered as a bug. denis -- _________________ vita es estrany spir.wikidot.com
Mar 27 2011
parent Jacob Carlborg <doob me.com> writes:
On 2011-03-27 14:55, spir wrote:
 On 03/27/2011 12:28 PM, Ishan Thilina wrote:
 When I give "dmd untitled.d" command in my ubuntu maverick 64 bit
 laptop I get
 the following error.

 "
 object.d: Error: module object is in file 'object.d' which cannot be read
 import path[0] = /etc/../../src/phobos
 import path[1] = /etc/../../src/druntime/import
 "

 I tried all morning to solve this problem, tried every google result I
 could
 find. Checked the mail archive to solve this problem. But I still
 couldn't get
 rid of that error.I anybody can help me, it would be a great help.

 I followed the steps in
 http://www.digitalmars.com/d/2.0/dmd-linux.html .I
 first used the command "cp dmd2/linux/bin/dmd.conf /etc
 " . Then I gave "sudo apt-get install gcc-multilib g++-multilib
 libc6-i386
 libc6-dev-i386" command.

 Thank you :)

First, please always post the piece of code that provokes an error. If it's a big or complicated thing, then try to reduce it to the smallest and simplest bit possible. Usually, doing this will let you find the source of the problem ;-) Second, this kind of error is caused by wrong import path (yes, the error message could mention "import"). Typically, when one writes eg: import range; instead of import std.range; But your case is strange. Do you know object.d is the core of D's std lib, which defines about all what you absolutely need to use when programming in D? One does not need to import it, this is automatical. Also, the message says the error happens in object.d itself, which is very un-probable. I thus suspect you named one of your own modules "object.d", which breaks the import mechanics (for D's standard object.d and possibly for other stdlib/phobos modules). This may be considered as a bug. denis

The error "object.d: Error: module object is in file 'object.d' which cannot be read" usually happens when DMD can't find the sources or phobos. -- /Jacob Carlborg
Mar 27 2011
prev sibling next sibling parent spir <denis.spir gmail.com> writes:
On 03/27/2011 12:28 PM, Ishan Thilina wrote:
 When I give "dmd untitled.d" command in my ubuntu maverick 64 bit laptop I get
 the following error.

 "
 object.d: Error: module object is in file 'object.d' which cannot be read
 import path[0] = /etc/../../src/phobos
 import path[1] = /etc/../../src/druntime/import
 "

 I tried all morning to solve this problem, tried every google result I could
 find. Checked the mail archive to solve this problem. But I still couldn't get
 rid of that error.I anybody can help me, it would be a great help.

 I followed the steps in http://www.digitalmars.com/d/2.0/dmd-linux.html .I
 first used the command "cp dmd2/linux/bin/dmd.conf /etc
 " . Then I gave "sudo apt-get install gcc-multilib g++-multilib libc6-i386
 libc6-dev-i386" command.

 Thank you :)

PS: I tried to compile an empty module called "object.d". This gives me pages & pages & pages of "undefined x" errors ;-) denis -- _________________ vita es estrany spir.wikidot.com
Mar 27 2011
prev sibling next sibling parent reply Jacob Carlborg <doob me.com> writes:
On 2011-03-27 12:28, Ishan Thilina wrote:
 When I give "dmd untitled.d" command in my ubuntu maverick 64 bit laptop I get
 the following error.

 "
 object.d: Error: module object is in file 'object.d' which cannot be read
 import path[0] = /etc/../../src/phobos
 import path[1] = /etc/../../src/druntime/import
 "

 I tried all morning to solve this problem, tried every google result I could
 find. Checked the mail archive to solve this problem. But I still couldn't get
 rid of that error.I anybody can help me, it would be a great help.

 I followed the steps in http://www.digitalmars.com/d/2.0/dmd-linux.html .I
 first used the command "cp dmd2/linux/bin/dmd.conf /etc
 " . Then I gave "sudo apt-get install gcc-multilib g++-multilib libc6-i386
 libc6-dev-i386" command.

 Thank you :)

You can try and installing DMD with my tool, DVM: https://bitbucket.org/doob/dvm . It makes it easy to install and switch between different versions of DMD. Just run: wget -O dvm https://bitbucket.org/doob/dvm/downloads/dvm-0.1.1-linux && chmod +x dvm && ./dvm install dvm dvm install 2.052 dvm use 2.052 -- /Jacob Carlborg
Mar 27 2011
next sibling parent reply Ishan Thilina <ishanthilina gmail.com> writes:
 Jacob:

An error comes when the " ./dvm install dvm" command is given.

"
./dvm: error while loading shared libraries: libz.so.1: cannot open shared
object
file: No such file or directory
"

 Trass3r:

No, dmd.conf in the dmd2/linux/bin is there safely
Mar 27 2011
next sibling parent reply Jacob Carlborg <doob me.com> writes:
On 2011-03-27 21:24, Ishan Thilina wrote:
  Jacob:

 An error comes when the " ./dvm install dvm" command is given.

 "
 ./dvm: error while loading shared libraries: libz.so.1: cannot open shared
object
 file: No such file or directory

You don't have libz installed? Oh, you're running 64bit, you need to install 32bit libraries. I also forgot to mention that DVM currently only installs the 32bit version of DMD. The 64bit version is quite new, don't know if it's experimental, alpha or beta.
  Trass3r:

 No, dmd.conf in the dmd2/linux/bin is there safely

-- /Jacob Carlborg
Mar 27 2011
next sibling parent Jacob Carlborg <doob me.com> writes:
On 2011-03-27 23:05, Jonathan M Davis wrote:
 On 2011-03-27 13:20, Jacob Carlborg wrote:
 On 2011-03-27 21:24, Ishan Thilina wrote:
  Jacob:

 An error comes when the " ./dvm install dvm" command is given.

 "
 ./dvm: error while loading shared libraries: libz.so.1: cannot open
 shared object file: No such file or directory

You don't have libz installed? Oh, you're running 64bit, you need to install 32bit libraries. I also forgot to mention that DVM currently only installs the 32bit version of DMD. The 64bit version is quite new, don't know if it's experimental, alpha or beta.

Probably alpha. I believe that it mostly works, but there are still plenty of bugs to find, I'm sure. However, depending on what you mean by "installing" the compiler, there is no 32-bit vs 64-bit version. Only the libraries differ. There is only a 32-bit binary for the compiler, and you pass it -m64 if you want it to compile 64-bit binaries. So, if your tool deals with the compiler only, then 32-bit vs 64-bit is currently a moot point. On the other hand, if it deals with the standard libraries too (as it probably does), then 32-bit vs 64-bit _is_ an issue, but it isn't an issue for the compiler itself. And unless you're not using the standard dmd.conf as part of switching compilers, there would already be a difference in the library layout once 64-bit compilation was introduced, since the 32-bit Phobos was moved from dmd2/linux/lib to dmd2/linux/lib32 (with the 64-bit version in dmd2/linux/lib64). And if you made the lib32 change, then having it work with 64-bit is likely trivial. And if you didn't make such a change, you're going to have to eventually. Personally, I don't see tha alpha quality of the 64-bit code generation to be a reason not to support it. It's been released. But then again, I don't use your tool at all and find no need for it, so it's not like I'm one of your users. - Jonathan M Davis

What I meant with "installing" is that he shouldn't expect to be able to produce 64bit binaries with a DMD installed with my tool. I have changed the tool to handle the lib -> lib32/lib64 change. It is a trivial change to make the 64bit installation possible. The reason I have made that change yet is a couple of reasons: * I was planning to refactor the whole tool into a library and a tool using that library. I was planning to wait with all the new functionality until after the refactoring was done. * I'm not 100% how I want the default behavior to be. When the 64bit is mature enough that will probably be the default when running on a 64bit machine and otherwise 32bit. I will also provide an option to installed the non-native library as well. The question is, what should be the default behavior now on a 64bit machine, 32bit or 64bit? Yes, I do have a custom dmd.conf. No reason to put the "bin" folder in an extra folder just because that's the layout in the zip file. I guess you're right, that I shouldn't blame the current status of the 64bit code generation as a reason not to support installing it. Just thought it was easier to explain it that way the more complete explanation I gave here. I do know that the compiler can produce both 32 and 64bit binaries and the only difference is the standard library. -- /Jacob Carlborg
Mar 28 2011
prev sibling parent reply Ishan Thilina <ishanthilina gmail.com> writes:
 Jonathan:

Yeah I checked. It's there :s. I dont know what has gone wrong, but I'm using
the
default settings . I have GDC installed too. Can this have any connection with
this problem( just a wild guess ) ?

 Jacob:

I wasn't sure about which libraries you were talking about. The only lib set I
left out was ia32-libs. So I installed it too.That didn't solve the problem. So
I
tried to install the deb file by force.

"sudo dpkg -i --force-architecture dmd***.dmd"

now I get a whole lot more errors :s.

"
ishan ishan-Ubu-I1464:~/Geany Projects$ dmd untitle.d
/usr/include/d/dmd/phobos/object.d(51): C-style function pointer and pointer to
array syntax is deprecated. Use 'function' to declare function pointers
/usr/include/d/dmd/phobos/std/format.d(672): no identifier for declarator
inout(fakevalue)
/usr/include/d/dmd/phobos/std/c/stdlib.d(43): C-style function pointer and
pointer
to array syntax is deprecated. Use 'function' to declare function pointers
/usr/include/d/dmd/phobos/std/c/stdlib.d(59): C-style function pointer and
pointer
to array syntax is deprecated. Use 'function' to declare function pointers
/usr/include/d/dmd/phobos/std/c/linux/linux.d(558): C-style function pointer and
pointer to array syntax is deprecated. Use 'function' to declare function
pointers
/usr/include/d/dmd/phobos/std/c/linux/linux.d(574): C-style function pointer and
pointer to array syntax is deprecated. Use 'function' to declare function
pointers
"

I'm trying to compile the following simple code. As you can see it should work
without any problem.

"
import std.stdio;



int main()

{

	writefln("Hello world");



	return 0;

}

"
"
Mar 28 2011
parent Jacob Carlborg <doob me.com> writes:
On 2011-03-28 16:49, Ishan Thilina wrote:
  Jonathan:

 Yeah I checked. It's there :s. I dont know what has gone wrong, but I'm using
the
 default settings . I have GDC installed too. Can this have any connection with
 this problem( just a wild guess ) ?

  Jacob:

 I wasn't sure about which libraries you were talking about. The only lib set I
 left out was ia32-libs. So I installed it too.That didn't solve the problem.
So I
 tried to install the deb file by force.

To run 32bit applications on a 64bit machine you need 32bit compatible runtime libraries, regardless if you run my installation tool or dmd (dmd is a 32bit tool even thought it can produce 64bit binaries). I don't know what exact runtime libraries are needed but for my tool you need the regular runtime libraries you would need running any kind of 32bit application and 32bit version of libz.
 "sudo dpkg -i --force-architecture dmd***.dmd"

 now I get a whole lot more errors :s.

 "
 ishan ishan-Ubu-I1464:~/Geany Projects$ dmd untitle.d
 /usr/include/d/dmd/phobos/object.d(51): C-style function pointer and pointer to
 array syntax is deprecated. Use 'function' to declare function pointers
 /usr/include/d/dmd/phobos/std/format.d(672): no identifier for declarator
 inout(fakevalue)
 /usr/include/d/dmd/phobos/std/c/stdlib.d(43): C-style function pointer and
pointer
 to array syntax is deprecated. Use 'function' to declare function pointers
 /usr/include/d/dmd/phobos/std/c/stdlib.d(59): C-style function pointer and
pointer
 to array syntax is deprecated. Use 'function' to declare function pointers
 /usr/include/d/dmd/phobos/std/c/linux/linux.d(558): C-style function pointer
and
 pointer to array syntax is deprecated. Use 'function' to declare function
pointers
 /usr/include/d/dmd/phobos/std/c/linux/linux.d(574): C-style function pointer
and
 pointer to array syntax is deprecated. Use 'function' to declare function
pointers
 "

 I'm trying to compile the following simple code. As you can see it should work
 without any problem.

 "
 import std.stdio;



 int main()

 {

 	writefln("Hello world");



 	return 0;

 }

 "
 "

-- /Jacob Carlborg
Mar 29 2011
prev sibling parent Jonathan M Davis <jmdavisProg gmx.com> writes:
On 2011-03-27 13:20, Jacob Carlborg wrote:
 On 2011-03-27 21:24, Ishan Thilina wrote:
  Jacob:
 
 An error comes when the " ./dvm install dvm" command is given.
 
 "
 ./dvm: error while loading shared libraries: libz.so.1: cannot open
 shared object file: No such file or directory

You don't have libz installed? Oh, you're running 64bit, you need to install 32bit libraries. I also forgot to mention that DVM currently only installs the 32bit version of DMD. The 64bit version is quite new, don't know if it's experimental, alpha or beta.

Probably alpha. I believe that it mostly works, but there are still plenty of bugs to find, I'm sure. However, depending on what you mean by "installing" the compiler, there is no 32-bit vs 64-bit version. Only the libraries differ. There is only a 32-bit binary for the compiler, and you pass it -m64 if you want it to compile 64-bit binaries. So, if your tool deals with the compiler only, then 32-bit vs 64-bit is currently a moot point. On the other hand, if it deals with the standard libraries too (as it probably does), then 32-bit vs 64-bit _is_ an issue, but it isn't an issue for the compiler itself. And unless you're not using the standard dmd.conf as part of switching compilers, there would already be a difference in the library layout once 64-bit compilation was introduced, since the 32-bit Phobos was moved from dmd2/linux/lib to dmd2/linux/lib32 (with the 64-bit version in dmd2/linux/lib64). And if you made the lib32 change, then having it work with 64-bit is likely trivial. And if you didn't make such a change, you're going to have to eventually. Personally, I don't see tha alpha quality of the 64-bit code generation to be a reason not to support it. It's been released. But then again, I don't use your tool at all and find no need for it, so it's not like I'm one of your users. - Jonathan M Davis
Mar 27 2011
prev sibling parent Jonathan M Davis <jmdavisProg gmx.com> writes:
On 2011-03-27 12:24, Ishan Thilina wrote:
 No, dmd.conf in the dmd2/linux/bin is there safely

Perhaps druntime got messed up then. Is dmd2/src/druntime/import/object.di there? Or did you ever mess with your dmd.conf? If you're using the default and you've left files in place without trying to do stuff like move libraries to /usr/lib, then it should work just fine. If you messed with dmd.conf or you moved the standard libraries or source around without changing your dmd.conf, then it's not going to be able to find the source or libraries. - Jonathan M Davis
Mar 27 2011
prev sibling next sibling parent spir <denis.spir gmail.com> writes:
On 03/28/2011 04:49 PM, Ishan Thilina wrote:

 now I get a whole lot more errors :s.

 "
 ishan ishan-Ubu-I1464:~/Geany Projects$ dmd untitle.d
 /usr/include/d/dmd/phobos/object.d(51): C-style function pointer and pointer to
 array syntax is deprecated. Use 'function' to declare function pointers
 /usr/include/d/dmd/phobos/std/format.d(672): no identifier for declarator
 inout(fakevalue)
 /usr/include/d/dmd/phobos/std/c/stdlib.d(43): C-style function pointer and
pointer
 to array syntax is deprecated. Use 'function' to declare function pointers
 /usr/include/d/dmd/phobos/std/c/stdlib.d(59): C-style function pointer and
pointer
 to array syntax is deprecated. Use 'function' to declare function pointers
 /usr/include/d/dmd/phobos/std/c/linux/linux.d(558): C-style function pointer
and
 pointer to array syntax is deprecated. Use 'function' to declare function
pointers
 /usr/include/d/dmd/phobos/std/c/linux/linux.d(574): C-style function pointer
and
 pointer to array syntax is deprecated. Use 'function' to declare function
pointers
 "

 I'm trying to compile the following simple code. As you can see it should work
 without any problem.

 "
 import std.stdio;



 int main()

 {

 	writefln("Hello world");



 	return 0;

 }

I have no idea why and where your issues in using D with dmd come from. AFAIK, it just works out of the box if you use release versions. Just 2 notes about the piece of code: First, you often do not need in D a program result code (int). Second, writefln, as opposed to writeln, expects a format string as first argument. void main () { writeln("Hello, world!"); auto userName = "Otto"; writefln("Hello, %s!", userName); } Denis -- _________________ vita es estrany spir.wikidot.com
Mar 28 2011
prev sibling parent David Nadlinger <see klickverbot.at> writes:
On 3/27/11 12:28 PM, Ishan Thilina wrote:
 When I give "dmd untitled.d" command in my ubuntu maverick 64 bit laptop I get
 the following error.

 "
 object.d: Error: module object is in file 'object.d' which cannot be read
 import path[0] = /etc/../../src/phobos
 import path[1] = /etc/../../src/druntime/import
 "

Your dmd.conf doesn't have the correct include path for Phobos. If you post it here, along with the location of the Phobos sources (the directory that contains object.di) on your system, we might be able to give you a detailed description of how to resolve this issue. David
Mar 29 2011