Ошибка компилятора

Здравствуйте. Мой вопрос показывается довольно популярный среди сетей интернета. Но ответ я не могу найти. Ошибка в комплиляторе от Microsoft Visual Studio 2013. В коде ошибки не может быть, я специально взял самый простой код с классом. Ошибка такая, что-то сделал, а что-то, это файл с расширением obj. Остальное, например dll, exe, exp и другие не работают. Пишет нет разрешения файлов, что делать, кто сталкивался с такой проблемой?

Ничего не понял ((
Пожалуйста сформулируй вопрос менее сумбурно.
Покажи код, который вызывает ошибку.
Покажи оригинальное сообщение об ошибке.
Может и разберёмся...

Не происходит компиляция dll. Так же с exe, через консоль в Microsoft Visual Studio 2013
Ошибка: не разрешенные файлы : (кол-во)
Расширения такие как lib, exp, obj компилируются

Ошибку не показал, так как все понятно, и просто не было исходного кода
альтернативный текст

Нужно больше информации. Вы пишете какими-то обрывками сознания.

Приведите пример исходного кода, который не компилируется и текст ошибки компилятора.

На скриншоте выше вы запускаете cl.exe без необходимых параметров, на что он и ругается. Если cl.exe запускается графическим интерфейсом Visual Studio, то уточните тип проекта, который вы создаете (Пустой проект, консольное приложение или что-то иное).

И выражайте пожалуйста свои мысли более конструктивно.

альтернативный текст

Код:

main1.cpp

    #include <iostream>
    #include <conio.h>
    #include "Account.h"


using namespace std;
using Nikam::Account;

int main()
{
    setlocale(0, "");

    Account a;

    a.setNikname("Nikita");
    a.setLast_name("Bikmaev");

    cout << a.getNikname() << endl;
    cout << a.getLast_name() << endl;

    _getch();
    return 0;
}

Account.h

#pragma once

namespace Nikam
{
    class Account
    {
    private:
        char* Nikname;
        char* Last_name;
    public:
        Account();
        ~Account();
        void setNikname(char*);
        char* getNikname();
        void setLast_name(char*);
        char* getLast_name();
    };

}

Account.cpp

#include "Account.h"

namespace Nikam
{

    Account::Account()
    {
    }


    Account::~Account()
    {
    }
    void Account::setNikname(char* nikname)
    {
        Nikname = nikname;
    }
    char* Account::getNikname()
    {
        return Nikname;
    }
    void Account::setLast_name(char* last_name)
    {
        Last_name = last_name;
    }
    char* Account::getLast_name()
    {
        return Last_name;
    }
}

Самый простой код

Пробелы наверху в первом коде, где подключаются библиотеку, это я тут начудил. Причины там нет

Похоже, что линкеру для сборки exe'шника не хватает файла Account.obj.

Имея Visual Studio, ты пользуешься для компиляции и сборки интерфейсом командной строки из каких соображений?

Если ты в IDE (интегрированной среде разработчика) правильно организуешь проект, то всё откомпилируется и соберётся без ошибок. (И без геморроя.)

Если же религия не позволяет пользоваться IDE, то в командных строках для компилятора и линкера указывай все необходимые параметры.

При максимально дефолтных настройках компилятора и линкера командные строки будут следующие:

cl main.cpp /c
cl account.cpp /c
link /OUT:main1.exe main.obj account.obj

Проверено с твоим кодом.

Так ехе я могу скопилировать, я не могу с помощью командной строки скомпилировать dll и подключить к exe

Так у вас функция main определена в программе. Как вы это собираетесь засунуть в DLL?

DLL — это динамически подключаемый набор функций, а не автономно исполняемый модуль. В его коде не должно быть функции main. На этот «неразрешенный внешний символ» компилятор и ругается.

Сперва нужно скомпилить и слинковать DLL, потом положить его в $PATH или добавить директорию с программой в системную переменную $PATH.

После чего, компилировать основную программу, указав, какие DLL-ки ей использовать. Пример для gcc (только для shared-objects в linux, но суть одна и та же) — http://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html

Пример построения консольного приложения с использованием DLL (MS Visual Studio 2013): Walkthrough: Creating and Using a Dynamic Link Library (C++)

Там же, если немного покопаться можно найти практически всю информацию, касающуюся DLL.

По поводу того, где должна лежать DLL. Я могу ошибаться, но вроде алгоритм поиска следующий:

  1. Каталог, из которого запущено приложение (.exe).
  2. Текущий каталог.
  3. %windir%\System32
  4. %windir%\System
  5. %windir%
  6. Каталоги, перечисленные в переменной окружения PATH.

Т.е. в 90% случаев самодельную DLL логично держать в каталоге приложения. И геморроя меньше, и DLL hell не провоцировать.

Что может значить эта ошибка? расшифруйте, пожалуйста.

Компилятор: MinGW GCC 4.7.2 32-bit Release
Building Makefile «C:\Users\Виктория\Desktop\Makefile.win»
Выполнение make...
mingw32-make.exe -f «C:\Users\Виктория\Desktop\Makefile.win» all
g++.exe -c main.cpp -o main.o -I«C:/Program Files (x86)/Dev-Cpp/MinGW32/include» -I«C:/Program Files (x86)/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.7.2/include/c++»

main.cpp: In function 'int main(int, char*)':
main.cpp:28:30: error: invalid conversion from 'int' to 'char
' [-fpermissive]

In file included from main.cpp:7:0:
detail.h:12:2: error: initializing argument 1 of 'detail::detail(char, int)' [-fpermissive]
main.cpp:28:30: error: invalid conversion from 'const char
' to 'int' [-fpermissive]
In file included from main.cpp:7:0:
detail.h:12:2: error: initializing argument 2 of 'detail::detail(char, int)' [-fpermissive]
main.cpp:29:29: warning: deprecated conversion from string constant to 'char
' [-Wwrite-strings]
main.cpp:31:24: warning: deprecated conversion from string constant to 'char' [-Wwrite-strings]
main.cpp:32:24: warning: deprecated conversion from string constant to 'char
' [-Wwrite-strings]

C:\Users\Виктория\Desktop\Makefile.win:28: recipe for target 'main.o' failed
mingw32-make.exe: *** [main.o] Error 1

Compilation failed after 0,67 seconds with errors

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.