2016-06-07 3 views
2

Ruby on Rails 4 App 내에 C++로 작성된 프로그램을 구현하는 데 관심이 있습니다.Rails 4 WebApp에서 C++ 프로그램을 실행하는 방법

C++ 응용 프로그램은 콘솔에서 실행되며 파일을 제공하여 작동하고 처리 한 다음 다른 파일을 출력합니다.

https://rubygems.org/gems/RubyInline

gem 'RubyInline', '~> 3.12', '>= 3.12.4' 

인라인은 당신이 당신의 루비 코드 내에서 외국 코드를 ​​작성할 수 :

나는 '루비 인라인'혐의로 외국 코드의 사용을 허용하는 보석을 발견했다. 문제의 코드가 변경되었는지 자동으로 판단하고 필요한 경우에만 코드를 작성합니다. 그런 다음 확장이 정의 된 클래스/모듈에 자동으로로드됩니다. 모든 언어로 인라인 코드를 작성할 수있는 추가 빌더를 작성할 수도 있습니다. Inline :: C를 템플릿으로 사용하고 Module # inline에서 필요한 API를 찾습니다.

require 'inline' 
class MyTest 
inline(:C) do |builder| 
builder.include '<iostream>' 
builder.add_compile_flags '-x c++', '-lstdc++' 
builder.c ' 
void hello(int i) { 
while (i-- > 0) { 
std::cout << "hello" << std::endl; 
} 
}' 
end 
end 
t = MyTest.new() 
t.hello(3) 

문제는 내가 만든 큰 C++ 프로그램을 구현하는 방법을 완전히 확실하지 않다이다 :

는 문서에 따르면,이 같은 C 및 C++ 프로그램의 사용을 허용 여러 파일 중에서 C++에 익숙하지 않습니다.

이것은 루비 스크립트 안에 C++ 코드를 추가하고 C++ 프로그램이 여러 파일과 폴더로 만들어진 것처럼 보입니다.

루비 인라인은 내가하고 싶은 일을하거나 거기에 더 좋은 옵션이 있습니까?

C++ 응용 프로그램을 루비 파일에 넣지 않고 직접 호출 할 수있는 방법이 있습니까?

C++ 응용 프로그램에 제공 될 파일이 웹 인터페이스를 통해 업로드됩니다. 어떻게 결과를 출력 할 수 있도록 C++ 프로그램에 피드 할 수 있습니까?

+1

[Ruby에서 쉘 명령 호출하기] ( –

+0

) 질문 할 올바른 질문을 모른다고 생각합니다. 그 질문에 "쉘 명령"이라는 단어를 사용자가 속이 지 않도록하십시오. 시스템에서 명령을 호출 할 수 있어야합니다. –

+3

backticks,'system' 메소드와'Open3'의 사용법을 조사하십시오. Ruby를 사용하면 다른 코드를 쉽게 호출 할 수 있으며 여러 가지 방법이 있습니다. 기능이 내장되어 있기 때문에 보석이 필요하지 않습니다. 인라인이 원하는 작업을 수행 할 수 있는지 또는 더 나은 옵션이 있는지 알려주지는 못합니다. 당신은 우리가 그 질문들에 답하기 위해 당신이 알고있는 모든 것을 우리에게 말해야 할 것입니다. –

답변

2

Ruby는 ` 문자를 사용하여 기본 명령을 실행하는 기능을 지원합니다. 예를 들어, 아래에 두 개의 인수를 취한 다음 함께 결합 된 표준 출력 모두에 인쇄하는 C++ 프로그램이 있습니다. 는 C++ 코드는, 정말 단 하나의 시간을 컴파일 할 필요가 있지만

#include <iostream> 

int main(int argc, char ** argv){ 
    std::cout << argv[1] << argv[2] << std::endl; 
    return 0; 
} 

,이 단계는 아마 우리가 루비 내에서 컴파일 할 수 있습니다, 필요하지 않을 것입니다 :이 프로그램의 코스 코드는 아래에서 볼 수 있습니다 (g ++을 원하는 컴파일러로 바꿀 수 있습니다.) 명령이 성공적으로 컴파일되면 변수 success을 true로 설정하고 그렇지 않으면 false로 설정합니다. 당신은 작은을 변경해야 할 수도 있습니다 "HelloWorld\n"

:

word1 = "Hello" 
word2 = "World" 
commandOutput = `./#{outputBinaryFile} '#{word1}' '#{word2}'` 

-commandOutput을 설정합니다 : 이제 우리는 우리의 코드를 컴파일 한 것을

pathToSource = "your/path/to/file.cpp" 
outputBinaryFile = "your/desired/output/file.bin" 

success = system("g++ #{pathToSource} -o #{outputBinaryFile}") 

, 우리는 루비에 다음을 실행하여 실행할 수 있습니다 실행중인 시스템에 따라 컴파일러와 같은 것들이 있지만 * NIX 시스템에서이 기능이 작동해야합니다.

관련 문제